Skip to content

Commit 3cb6c61

Browse files
Merge pull request #292 from dinis-cruz-bs/add-interlocked-exchange-add
2 parents 9b42ace + 9c1c416 commit 3cb6c61

1 file changed

Lines changed: 14 additions & 0 deletions

File tree

speakeasy/winenv/api/usermode/kernel32.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2555,6 +2555,20 @@ def InterlockedDecrement(self, emu, argv, ctx: api.ApiContext = None):
25552555

25562556
return ival
25572557

2558+
@apihook("InterlockedExchangeAdd", argc=2)
2559+
def InterlockedExchangeAdd(self, emu, argv, ctx: api.ApiContext = None):
2560+
"""
2561+
LONG InterlockedExchangeAdd(
2562+
LONG volatile *Addend,
2563+
LONG Value
2564+
);
2565+
"""
2566+
Addend, Value = argv
2567+
old = int.from_bytes(self.mem_read(Addend, 4), "little")
2568+
new = (old + (Value & 0xFFFFFFFF)) & 0xFFFFFFFF
2569+
self.mem_write(Addend, new.to_bytes(4, "little"))
2570+
return old
2571+
25582572
@apihook("GetCommandLine", argc=0)
25592573
def GetCommandLine(self, emu, argv, ctx: api.ApiContext = None):
25602574
"""

0 commit comments

Comments
 (0)