【发布时间】:2018-12-26 07:51:26
【问题描述】:
使用 WinDbg 作为内存转储附加到 DLL 看起来像(例如)
cdb -z %__appdir__%kernel32.dll
它工作正常,现在我可以读取 NT_IMAGE_HEADER 结构
!dh kernel32 -f
为了读取导出表,我使用下一个技术
dd kernel32+262c; * example of an export table RVA;
是第二行第二列中导出函数的数量,并偏移到第三行第一列中导出表的开头。检查一下
dd kernel32+353c; * example of offset;
...; * take the first address in output;
da kernel32+4ba5
7c804ba5 "ActivateActCtx"
宾果!现在我们可以一次又一次地使用da 来查看其他导出的函数,但这太糟糕了。所以最好使用下一个技巧
? (kernel32+353c); * get hexadecimal address of first exported function;
r? @$t0 = (int *)0x7c80353c; * set the pointer on that address into pseudo-register;
.for (r @$t1 = 0; @$t1 < 3ba; r @$t1 = @$t1 + 1) {da kernel32+(@@c++(@$t0[@$t1]));}
我的问题是什么?目前我正在尝试读取导入的函数,但是当我输入时
dps kernel32+1000
其中1000 是Import Address Table Directory 的RVA 我只有部分姓名地址,没有姓名。那么,如何获取导入函数的所有名称的列表?有没有最简单的方法或者我应该再写一个循环?循环应该是怎样的?
【问题讨论】:
标签: windows dll x86 reverse-engineering windbg