社区
系统维护与使用区
帖子详情
高分求救:有关内嵌汇编!!急!!!
CoolQ
2002-07-10 05:12:41
我在C语言中使用内嵌汇编
__asm__
("
jmp 0x2a
")
其中的jmp 0x2a到底是绝对跳转还是相对跳转?我想应该是相对跳转,可是反汇编后却是绝对跳转。我该如何用jmp实现相对跳转呢?我的环境是linux7.2 + gcc2.96 + gdb5.0,希望大家指点!不够分再给!!!
...全文
21
11
打赏
收藏
高分求救:有关内嵌汇编!!急!!!
我在C语言中使用内嵌汇编 __asm__ (" jmp 0x2a ") 其中的jmp 0x2a到底是绝对跳转还是相对跳转?我想应该是相对跳转,可是反汇编后却是绝对跳转。我该如何用jmp实现相对跳转呢?我的环境是linux7.2 + gcc2.96 + gdb5.0,希望大家指点!不够分再给!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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年的
汇编
考试题目,希望对大家有所帮助,好好复习必得
高分
!
《ACM竞赛-C/C++入门》 C语言-13
清华大学尹成老师、微软全球具有价值专家,手把手从基础教学到深入探讨,教你成为信息学竞赛高手,让你知识点一通百通拿到竞赛
高分
,为编程开发打下坚实的基础! 从零基础到在蓝桥杯、NOIP、ACM竞赛、信息学...
ssd7 exercise1
高分
答案
ssd7 exercise1
高分
答案 !!!
汇编
(初步学习以及期末复习).zip
本资源对于学习
汇编
知识很有帮助,有助你解决你的疑难问题,可以在期末拿
高分
!
系统维护与使用区
19,612
社区成员
74,603
社区内容
发帖
与我相关
我的任务
系统维护与使用区
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
复制链接
扫一扫
分享
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章