社区
系统维护与使用区
帖子详情
高分求救:有关内嵌汇编!!急!!!
CoolQ
2002-07-10 05:12:41
我在C语言中使用内嵌汇编
__asm__
("
jmp 0x2a
")
其中的jmp 0x2a到底是绝对跳转还是相对跳转?我想应该是相对跳转,可是反汇编后却是绝对跳转。我该如何用jmp实现相对跳转呢?我的环境是linux7.2 + gcc2.96 + gdb5.0,希望大家指点!不够分再给!!!
...全文
26
11
打赏
收藏
高分求救:有关内嵌汇编!!急!!!
我在C语言中使用内嵌汇编 __asm__ (" jmp 0x2a ") 其中的jmp 0x2a到底是绝对跳转还是相对跳转?我想应该是相对跳转,可是反汇编后却是绝对跳转。我该如何用jmp实现相对跳转呢?我的环境是linux7.2 + gcc2.96 + gdb5.0,希望大家指点!不够分再给!!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zengpan_panpan
2002-07-11
打赏
举报
回复
前面是我搞错了,加了括号也不行,因为我查看的是目标文件。
测试程序:a.c
main(){
a:
goto a;
__asm__("jmp -1");
}
[root@m00 /tmp]# cc -c a.c
[root@m00 /tmp]# objdump -d a.o
a.o: file format elf32-i386
Disassembly of section .text:
00000000 <main>:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 90 nop
4: eb fe jmp 4 <main+0x4>
6: e9 fb ff ff ff jmp 6 <main+0x6>
b: c9 leave
c: c3 ret
这里是对的。
但是编译成a.out
[root@m00 /tmp]# cc a.c
[root@m00 /tmp]# objdump -d a.out
......
08048398 <main>:
8048398: 55 push %ebp
8048399: 89 e5 mov %esp,%ebp
804839b: 90 nop
804839c: eb fe jmp 804839c <main+0x4>
804839e: e9 5c 7c fb f7 jmp ffffffff <_end+0xf7fb6b0b>
80483a3: c9 leave
80483a4: c3 ret
......
这里就不对了,看来是重定位表惹的祸,如果没有用标号,连接的时候就认为是绝对地址。
eb和e9都是相对转移,不过一个8位,一个32位而已。很明显两个地方的jmp不一样,被改了。不过我现在还没有找到as里面控制重定位表的方法,as-info里面写得太含糊了。
CoolQ
2002-07-10
打赏
举报
回复
to zengpan_panpan:
可是我的gcc编译
__asm__("jmp 0x2a"); 或者__asm__("jmp (0x2a)");都是编译成
jmp 0x2a,我试了gcc 2.95和2.96都这个样。难道你的不是这样吗?
只有设为.byte 0xeb,0x2a才是相对跳转。真是很奇怪呀。
zengpan_panpan
2002-07-10
打赏
举报
回复
不要搞错了,jmp 0x2a是相对跳转,只不过相对于eip=0
ljmp 0x2a或者jmp *0x2a才叫绝对跳转。
zengpan_panpan
2002-07-10
打赏
举报
回复
__asm__("jmp 0x2a")
改成
__asm__("jmp (0x2a)")
你的gcc版本还不行,我就没有办法了。
zengpan_panpan
2002-07-10
打赏
举报
回复
a()
{
return 1;
}
b()
{
__asm__("call a");
}
是可以的啊,如果你再定义个叫a的标号就完蛋了。
cc -S 弄出来看一下就很清楚了啊。
CoolQ
2002-07-10
打赏
举报
回复
to zengpan_panpan:那如果我想相对call怎么办?也用标号?怎么用?
zengpan_panpan
2002-07-10
打赏
举报
回复
这是gcc的问题,又不允许jmp near ptr xxx 之类的做法,要不就只能用标号了。
__asm__("jmp here");
......
__asm__("here:");
CoolQ
2002-07-10
打赏
举报
回复
to zengpan_panpan:
难道就不能用jmp来实现吗?我想用jmp来实现。毕竟相对跳转不一定是-128-+127呀。而且我看资料应给是汇编成相对跳转。
cattiger
2002-07-10
打赏
举报
回复
关注
zengpan_panpan
2002-07-10
打赏
举报
回复
__asm__(".byte 0xeb
.byte 0x2a
");
gernal_dn
2002-07-10
打赏
举报
回复
用label
集美大学
汇编
考试题目2014
这是集美大学2014年的
汇编
考试题目,希望对大家有所帮助,好好复习必得
高分
!
汇编
语言 实用程序设计.ppt
武汉大学精品课件,有了这份课件,更容易考
高分
!
编译原理参看资料和指导合集
汇编
编译器原理脉络图.rar一位学过编译原理的学生的经验之谈.doc编译原理导论,学习编译原理必看.pdftp31%3B编译原理教程%3B胡元义%3B西安电子科技大学出版社%3B.TIF3版).pdf**********这些都是精华,学编译原理...
推荐开源项目:Guess That Lang!
立刻加入,分享你的
高分
,挑战你的编程直觉吧! 在这个充满挑战的数字时代,**Guess That Lang!**提供了寓教于乐的新方式。不仅锻炼了技术判断力,还加深了对程序语言的认识。是时候邀请你的朋友,一起在这场编程...
c语言大作业是什么意思,
高分
悬赏C语言作业!!!!!
急
!!!!!
简单的c语言大作业 谁能帮我写了
高分
悬赏啊 谢谢了 今天就是截止日期了
急
啊!!!!!!发到我qq 384858346 请认真完成 做一道即可 注意要求 完整回答 谢谢要求如下:A 在“二、作业内容”中选做一道即可。1. 所有...
系统维护与使用区
19,614
社区成员
74,587
社区内容
发帖
与我相关
我的任务
系统维护与使用区
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
复制链接
扫一扫
分享
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章