社区
系统维护与使用区
帖子详情
高分求救:有关内嵌汇编!!急!!!
CoolQ
2002-07-10 05:12:41
我在C语言中使用内嵌汇编
__asm__
("
jmp 0x2a
")
其中的jmp 0x2a到底是绝对跳转还是相对跳转?我想应该是相对跳转,可是反汇编后却是绝对跳转。我该如何用jmp实现相对跳转呢?我的环境是linux7.2 + gcc2.96 + gdb5.0,希望大家指点!不够分再给!!!
...全文
23
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**********这些都是精华,学编译原理必备啊!给力啊!
高分
资源啊!有木有!
Just S Rush-crx插件
语言:English,magyar Just S Rush是一款很棒的挑战游戏! 赶着,就像蛇一样赶着!获得更多球,获得
高分
! Just S Rush是一款很棒的挑战游戏! 快点! 就像蛇一样奔波! 获得更多球,获得
高分
!
推荐开源项目:Guess That Lang!
推荐开源项目:Guess That Lang! guess-that-langCLI game to see how fast you can guess the language of a code block!项目地址:https://gitcode.com/gh_mirrors/gu/guess-that-lang 在编码的世界里,语言的多样性既是挑战也是乐趣。如果你是编程爱好者,想要提升...
系统维护与使用区
19,619
社区成员
74,587
社区内容
发帖
与我相关
我的任务
系统维护与使用区
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
复制链接
扫一扫
分享
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章