当我将二进制数据从.exe复制到数组中时,它的格式为little endian。在C ++中,没问题:
char data[100] = {0x4d, 0x5a, 0x90, ...}
PIMAGE_DOS_HEADER IDH;
IDH = PIMAGE_DOS_HEADER(data);
printf("%d", IDH->e_magic);
输出为:
23117 in dec / 0x5a4d in hex
因此,似乎编译器正在自动进行从小端到大端的转换。
但是,当我想在Assembly(NASM)中转换此代码时,则很有可能不是这种情况。
假设IMAGE_DOS_HEADER
已经声明并且初始化为null,并且PIMAGE_DOS_HEADER
是指向该结构的第一个元素的指针。并将数据初始化为data db 4dh, 5ah, 90h, ...
现在:当我通过执行以下操作将值分配给structs元素时:
mov eax, [data]
mov [PIMAGE_DOS_HEADER], eax
mov eax, [data+2]
mov [PIMAGE_DOS_HEADER+2], eax
...
然后我想它将被分配为小端,因此值为0x4d5a
而不是0x5a4d
如何防止这种情况?