【发布时间】:2023-03-24 21:35:01
【问题描述】:
我正在努力弄清楚某个块将如何运作。堆上有如下地址
004B0000 73 6D 67 66 74 smgft
以及以下组件:
77A701B8 xor eax, eax
77A701BA mov ecx, 4
77A701BF lea edi, DWORD PTR DS:[ecx+4B0000]
77A701C5 xor DWORD PTR DS:[edi], ecx
77A701C5 loopd short ntdll.77A701BF
问题是在指令执行后以 ASCII 格式提供堆上五个字节的值。我能理解的如下
xor eax, eax ; 0 出局
mov ecx, 4 ;设置 ecx 4
lea edi, dword ptr ds:[ecx+4b0000] ;这会将存储在 ecx+4b0000 中的任何内容加载到 EDI 中,因此是 4b0004。我不确定这会抓住什么。我什至不确定 4b0000 会得到什么,因为它是 5 个字节。 mgft还是smgf?我认为smgf? +4h 对此有何影响?是 736D676678 吗?
xor dword ptr ds:[edi], ecx ;所以这将在 edi 处与新加载的 dword 进行异或 4h,但它在 loopd 中对它有什么作用?
循环短 ntdll.77A701BF ;所以这是一个“相等的循环”,但我不确定它上面的 xor 会转化为什么。它会减少ecx吗?但随后它又跳回了 lea 线。
【问题讨论】:
-
这是一个
loop,而不是loope(相等时循环),所以它不关心EFLAGS(异或设置)。见felixcloutier.com/x86/LOOP:LOOPcc.html