能力值:
( LV2,RANK:10 )
|
-
-
2 楼
text一般是代码段。举个例子,里面调用系统函数的时候采用call dword ptr [00403000]的形式。这里00403000里面存放的就是某个函数的地址。一般来说这些函数地址是连续存放在一起的,比如00403000所在的地方就是一个大的数组,里面存放的就是这个exe所需要的各个外部函数的地址。这些值是exe加载程序在载入exe时根据idata里面的描述,填写进去的。你可以参考一下PE文件里面引入表那一节,讲的挺详细的。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
谢谢,楼上兄弟的解答,可是我还是不明白.
比如printf
......
imagebase 00400000
......
idata RVA 00003000.......
在某个PE文件中的IDATA节是这样的
........
addr 00003194 hint(0268) name:printf
........
在TEXT中调用是这样的
.......
push 0040126f
004012A3 call 004013D8
...........
在地址004013D8处
jmp dword prt [004030C8]
.......
我的问题是,就从机器码来看
怎样把 004030C8 和 004013D8 和 004012A3 联系在一起而且这3个地方又和idata中的addr 00003194 hint(0268) name:printf 联系在一起.
很多反汇编工具在调用处都给出了注释 告诉这里调用msvcrt.dll中的printf了.
我不明白这些工具从哪些地方的数据进而把这3个地址联系到prinf的
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
这个容易,看你的idata节的printf,是不是指向30C8?意思就是让exe装载器把printf函数的地址放到004030C8这个地方。告诉你一个简单的方法看,用PEiD打开你的exe,点subsystem右边的>,然后选Import Table右边的>,选中你要察看的dll,比如msvcrt.dll,在下面看printf,看他的TrunkRVA是不是30C8。这样就联系起来了吧?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
谢谢楼上高手,能具体演示一下吗
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
谢谢icersg 兄弟的指点,我明白了.十分感谢
|
|
|