我只是尝试加上0x3C,但编译器正在将其转换为0x0F0。为什么?
这是kernel32_base声明,它作为参数传递给函数:
DWORD * kernel32_base
这里有C代码和反汇编代码:
DWORD PE_shift=NULL;
00DB212E mov dword ptr [PE_shift],0
PE_shift = *(kernel32_base + 0x3C); //60=3Ch
00DB2135 mov eax,dword ptr [kernel32_base]
00DB2138 mov ecx,dword ptr [eax+0F0h] ; <-----------------
00DB213E mov dword ptr [PE_shift],ecx
0F0h来自哪里?应该是0x3C吧?
答案 0 :(得分:1)
因为DWORD
是四字节类型。您的C代码表示在基指针后加载0x3C
'4字节数量。 4
次0x3C
为0xF0
。如果你想在字节偏移DWORD
得到0x3C
,那么它需要是:
PE_shift = *(DWORD*)((char*)kernel32_base + 0x3C);