首页
社区
课程
招聘
[求助]CALL的问题
发表于: 2008-8-8 16:57 3957

[求助]CALL的问题

2008-8-8 16:57
3957
在OD中看到调用函数都是:
00401000 >/$  6A 00        PUSH 0                                 
00401002  ¦.  68 00304000  PUSH hello.00403000                    
00401007  ¦.  68 0C304000  PUSH hello.0040300C                    
0040100C  ¦.  6A 00        PUSH 0                                 
0040100E  ¦.  E8 09000000  CALL <JMP.&user32.MessageBoxA>         

0040101C  $- FF25 08204000 JMP DWORD PTR DS:[ <&user32.MessageBoxA>] ;  user32.MessageBoxA

为什么在CALL那要再跳到后面的JMP啊?为什么不是直接CALL 08204000,另外08204000这个值 是怎么来的,怎么能通过它找到user32.MessageBoxA的地址

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 437
活跃值: (273)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
2
这个是DEBUG模式的一个特征吧 可能是方便调试 你用release可能就没有这个JMP了
2008-8-8 18:52
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3
这个不是DEBUG和Release的问题.
不过自己写的函数在Debug版中都是这样跳转过去的
2008-8-8 19:06
0
雪    币: 193
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
0040102A > $  6A 00         PUSH 0
0040102C   .  68 00304000   PUSH hello1.00403000                     ;  ASCII "Hello World"
00401031   .  68 0C304000   PUSH hello1.0040300C
00401036   .  6A 00         PUSH 0
00401038   .  E8 CB0F0000   CALL <&user32.MessageBoxA>  ;这样写不行啊,会出错,难道所有的调用函数都要先JMP吗?
2008-8-13 13:13
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
5
0040101C  $- FF25 08204000 JMP [00402008]

00402008: ????????    <- 系统会填上MessageBoxA的地址

call 0040101C , OD直接帮你翻成  CALL <JMP.&user32.MessageBoxA>
是不是好看多了
2008-8-13 13:22
0
雪    币: 193
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
OD里查看内存的命令是什么?比如想直接看403000的内容
2008-8-13 15:24
0
雪    币: 350
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
系统DLL里的API地址在你写程序的时候地址是不知道的. 编译时会自动写成那样的形式,
在装入时系统会自动帮你填写真实地址.

命令行  D 403000   

加密与解密3里有比较详细的这方面的内容.
2008-8-14 00:57
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
看看PE格式的导入表(Import Table)
2008-8-14 12:25
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
9
这是由于增量链接的缘故。
在编译时去掉增量链接选项就不会有JMP了
2008-8-14 12:32
0
游客
登录 | 注册 方可回帖
返回
//