我的问题很简单,但是我就是不懂,我应该使用什么样的工具来看c语言的汇编代码(我用XP)?

oooracle 2007-01-04 01:59:50
int func()
{
int i ;
int g ;
int j ;
char h ;
i = 1;
j=10;
return j ;
}

这个简单的函数在X86/Linux下的汇编结果是什么?

请问变量g,h 在编译后占用空间吗?

因为不懂,所以望各位详细指点
...全文
197 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2007-01-04
  • 打赏
  • 举报
回复
想转成什么样的汇编就找什么类型的 c 的编译器了. xp, 指是 Windows 类的汇编? 那就是 vc6/7 之类的了. cl /? 看一下什么参数可以创建 .asm 文件, 然后就 ....
oooracle 2007-01-04
  • 打赏
  • 举报
回复
我是XP那你看能用什么编译器呀????


需要帮助!
lptt 2007-01-04
  • 打赏
  • 举报
回复
找个编译器 自己去调啊 不能什么都帮吧 呵呵
oooracle 2007-01-04
  • 打赏
  • 举报
回复

lptt
int main()
{
int a = 10;
int b ,c;
a = a + 15;
b = b + 200;
c = a + b;
printf ("The result is %d\n",c);
return 0;
}

这段代码的汇编代码是什么????谢谢!!
oooracle 2007-01-04
  • 打赏
  • 举报
回复
为什么是add esp,-0x10
而不是sub呢?

难道栈增长的方向是高地址吗?
lptt 2007-01-04
  • 打赏
  • 举报
回复
问变量g,h 在编译后占用空间吗?
//////////////////////////////
我觉得这个问的有问题 讨论编译后没有意义
运行时
没有调用到func() func()内的所有局部变量都没有被创建
如果func()被调用 i g j h都要占用栈空间
步进调试
func()的汇编代码:

push ebp         //保存栈指针
mov ebp,esp
add esp,-0x10 //为4个变量分配拉16字节的栈空间 因为4字节对齐
//i存储在ebp-0x04 g在ebp-0x08 j在ebp-0x0c h在ebp-0x0d
mov[ebp-0x04],0x00000001 //i=1
mov[ebp-0x0c],0x0000000a //j=10
mov eax,[ebp-0x0c] //return j

mov esp,ebp //恢复指针 销毁局部栈
pop ebp
ret
应该明白拉吧 给分吧 :)
编译器是c++ builder 6.0
oooracle 2007-01-04
  • 打赏
  • 举报
回复
那g,h在stack中怎么存放的,你能不能给我上面代码的所有汇编代码!谢谢

还有你说的
windows 下可以用 ollydbg 察看反汇编代码。

具体怎么操作呀?(我使一点都不懂,但是还使想知道运行时系统stack中变量怎么放)

大熊猫侯佩 2007-01-04
  • 打赏
  • 举报
回复
请问变量g,h 在编译后占用空间吗?

应该不占磁盘文件空间,它们是动态变量运行时在stack中被申请。

windows 下可以用 ollydbg 察看反汇编代码。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧