| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 566 人关注过本帖
标题:一个c程序的两种反汇编代码不一样
只看楼主 加入收藏
tksfbz
Rank: 2
等 级:论坛游民
帖 子:6
专家分:20
注 册:2011-6-5
结帖率:0
收藏
已结贴  问题点数:5 回复次数:4 
一个c程序的两种反汇编代码不一样
一个c程序的两种反汇编代码不一样
★函数的参数传递和函数使用参数的方法:
源程序/* example1.c */

char ch;
int e_main()
{
e_putchar(ch);
}
反汇编1:(这是原文章中的)
xxxx:0000   CALL 0003
xxxx:0003   MOV  AX,000B
xxxx:0006   PUSH AX
xxxx:0007   CALL 0020
xxxx:000A   POP  CX
反汇编2:(这是我自己机子上的)
13AC:0000 E80000        CALL    0003
13AC:0003 A00E00        MOV     AL,[000E]
13AC:0006 98            CBW
13AC:0007 50            PUSH    AX
13AC:0008 E80000        CALL    000B
13AC:000B 59            POP     CX
13AC:000C C3            RET
13AC:000D 0E            PUSH    CS
13AC:000E 8A03          MOV     AL,[BP+DI]
-----------------------------------------------
原文章中说 000B 是全局变量ch在内存的地址,而我的AX寄存器的内容是FF8A
而且call 0020的0020是e_putchar代码的地址,而我的是call 000b,直接就往下走了13ac:000b pop cx
这怎么解释?
文件.rar (781 Bytes)


[ 本帖最后由 tksfbz 于 2012-3-28 20:04 编辑 ]
搜索更多相关主题的帖子: 文章 源程序 c程序 
2012-03-28 14:38
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:2 
把EXE发上来呗

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2012-03-28 17:55
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:2 
和编译器 编译参数有关系的

你和作者用的是一样的编译器 一样的参数么
2012-03-28 18:10
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:2 
谈谈个人看法:
1、如楼上所说,编译器及参数会影响;
2、char型数,在作为参数使用进栈,不会地址进栈;
3、没有看到环境保持的过程,BSP。

呵呵,原文中说的有误。
2012-03-28 19:21
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:0 
看了 没看明白 16位果然高深无比。

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2012-03-29 01:03
快速回复:一个c程序的两种反汇编代码不一样
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.057546 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved