QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 772|回复: 5

问段汇编代码的意思?怎么和.c程序联系起来??在线

[复制链接]
发表于 2005-4-23 20:25:53 | 显示全部楼层 |阅读模式
test.c 代码:
#include<stdio.h>
void hi(void)
{
printf("hi");
}
int main(int argc, char *argv[])
{
hi();
return 0;
}

//编译时没有任何优化,请教下面的汇编代码的理解,实在不知道具体是怎么生成的..
//我的环境gcc version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)+GNU gdb Red Hat Linux (6.1post-1.20040607.41rh)
main函数的汇编代码:
0x08048380 <main+0>: push %ebp
0x08048381 <main+1>: mov %esp,%ebp
0x08048383 <main+3>: sub $0x8,%esp
0x08048386 <main+6>: and $0xfffffff0,%esp
0x08048389 <main+9>: mov $0x0,%eax
0x0804838e <main+14>: add $0xf,%eax
0x08048391 <main+17>: add $0xf,%eax
0x08048394 <main+20>: shr $0x4,%eax
0x08048397 <main+23>: shl $0x4,%eax
0x0804839a <main+26>: sub %eax,%esp
0x0804839c <main+28>: call 0x8048368 <hi>
0x080483a1 <main+33>: mov $0x0,%eax
0x080483a6 <main+38>: leave
0x080483a7 <main+39>: ret
hi函数的汇编代码:
0x08048368 <hi+0>: push %ebp
0x08048369 <hi+1>: mov %esp,%ebp
0x0804836b <hi+3>: sub $0x8,%esp
0x0804836e <hi+6>: sub $0xc,%esp
0x08048371 <hi+9>: push $0x8048488
0x08048376 <hi+14>: call 0x80482b0 <_init+56>
0x0804837b <hi+19>: add $0x10,%esp
0x0804837e <hi+22>: leave
0x0804837f <hi+23>: ret
 楼主| 发表于 2005-4-24 00:37:07 | 显示全部楼层
up
回复

使用道具 举报

发表于 2005-4-24 16:28:00 | 显示全部楼层
你看过汇编没有??知道里面的指令是怎么回事吗?
如果回答上来,上面的,耐心点就知道是怎么回事啦!
回复

使用道具 举报

发表于 2005-4-24 18:07:15 | 显示全部楼层
你哪里没看懂?
回复

使用道具 举报

 楼主| 发表于 2005-4-27 12:43:34 | 显示全部楼层
关键是下面这段:
0x08048386 <main+6>: and $0xfffffff0,%esp
0x08048389 <main+9>: mov $0x0,%eax
0x0804838e <main+14>: add $0xf,%eax
0x08048391 <main+17>: add $0xf,%eax
0x08048394 <main+20>: shr $0x4,%eax
0x08048397 <main+23>: shl $0x4,%eax
0x0804839a <main+26>: sub %eax,%esp
回复

使用道具 举报

发表于 2005-4-27 12:50:15 | 显示全部楼层
我估计

是段模板代码,针对函数传参数用的。
你的函数什么参数都没有,模板照样被编译器拷过去,你这里
只不过就是在空转。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 03:41 , Processed in 0.069847 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表