装配内存数学和循环

我正在努力弄清楚某个块如何运作。 在堆上使用以下地址

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出eax

mov ecx,4; 设置ecx 4

lea edi,dword ptr ds:[ecx + 4b0000]; 这加载到EDI无论存储在ecx + 4b0000,所以4b0004。 我不确定这会抓住什么。 我甚至不知道4b0000会得到什么,因为它是5个字节。 mgft或smgf? 我认为smgf? 那么+ 4h如何影响呢? 使它成为736D676678?

xor dword ptr ds:[edi],ecx; 所以这将与新加载的dword在edi上异或,但它在循环中做了什么?

循环短ntdll.77A701BF; 所以这是一个“平等的循环”,但我不确定这是什么转化为xor上面。 它会减少ecx吗? 但随后它跳回到油路。


所述lea edi, dword ptr ds:[ecx+4b0000]加载值ecx+0x004b0000成EDI,并且不会在所有访问存储器。 loop指令就像“ ecx = ecx - 1; if(ecx != 0) goto ntdll.77A701BF ”。

并不是说这个代码可以展开,所以它变成:

    xor eax, eax

    lea edi, DWORD PTR DS:[4+0x004B0000]
    xor DWORD PTR DS:[edi], 0x00000004

    lea edi, DWORD PTR DS:[3+0x004B0000]
    xor DWORD PTR DS:[edi], 0x00000003

    lea edi, DWORD PTR DS:[2+0x004B0000]
    xor DWORD PTR DS:[edi], 0x00000002

    lea edi, DWORD PTR DS:[1+0x004B0000]
    xor DWORD PTR DS:[edi], 0x00000001

    xor ecx,ecx

哪些可以优化更多,因此它变成:

    xor BYTE PTR DS:[0x004B0004], 0x04
    xor BYTE PTR DS:[0x004B0003], 0x03
    xor BYTE PTR DS:[0x004B0002], 0x02
    xor BYTE PTR DS:[0x004B0001], 0x01

    xor eax, eax       ;May be unnecessary if value unused by later code
    mov edi,0x004B0001 ;May be unnecessary if value unused by later code
    xor ecx, ecx       ;May be unnecessary if value unused by later code

通过组合XOR可以对其进行优化:

    xor DWORD PTR DS:[0x004B0001], 0x04030201

    xor eax, eax       ;May be unnecessary if value unused by later code
    mov edi,0x004B0001 ;May be unnecessary if value unused by later code
    xor ecx, ecx       ;May be unnecessary if value unused by later code

注意:是的,这是一个未对齐的XOR,但可能比现代CPU上的多个较小的对齐XOR更快,因为它不跨越缓存线边界。

本质上; 整个循环可以简化为一条指令。

链接地址: http://www.djcxy.com/p/43855.html

上一篇: Assembly memory math and looping

下一篇: Binary Bomb Phase 5 issue (my phase 5 seems to be different from everyone elses)