C/C++读取文件16进制格式
读取代码
|
进阶篇 - 找 PE 文件内16进制特征码,计算对应的内存地址
比如我想要找到内存里 KiProcessExpiredTimerList+0x102 的位置:
征码:
int codeArr_kipetl_102[] = { |
在刚才的函数上稍作修改,找到这一串特征码在文件内出现的位置:
int get_PE_feature_rof( |
函数返回后成功拿到这个位置的 ROF:
然后看一下这个 ROF(0x30F42) 属于 PE 文件的哪一个区段。因为 .text 的 ROffset 小于 0x30F42 ,且 ROffset + RSize 大于 0x30F42 ,所以可知这段代码处于 .text 区段:
所以最终的偏移 = 我们代码的 ROF - .text区段的ROF + .text区段的VAddr = 0x30F42 - 0x600 + 0x1000 = 0x31942
用 PCHunter 看下 ntoskrnl.exe 的内核基地址(这里不讲怎么获取了)
试下 FFFFF8000421C000 + 0x31942 = FFFFF8000424D942
计算出的值刚好等于 WinDbg 中的值: