NASM PePacker-从数组读取小字节序二进制数据到结构中

时间:2019-09-16 23:39:51

标签: c++ winapi nasm endianness portable-executable

当我将二进制数据从.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

如何防止这种情况?

0 个答案:

没有答案