请教实现段间跳转的方法

x86cracker 2009-07-17 11:24:00
方法多多益善。
...全文
173 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cpuzer 2012-04-27
  • 打赏
  • 举报
回复
很强呢.。
机器码那种方法从未试过
cnzdgs 2009-07-18
  • 打赏
  • 举报
回复
1、
jmp segment:offset
如果编译器不支持,可以直接用机器码:
DB 0EAH
DW offset
DW segment
2、
push segment
push offset
retf
3、
jmp DWORD PTR 各种内存寻址方式访问远指针变量
zhgwbzhd 2009-07-18
  • 打赏
  • 举报
回复
jmp far
BAYNPU 2009-07-18
  • 打赏
  • 举报
回复
mov word ptr [bx],0
mov word ptr [bx+2],1500h
JMP far ptr [bx] ;转移至1500h:0

段间间接转移指令,用一个双字存储单元表示要跳转的目标地址。这个目标地址存放在主存中连续的两个字单元中的,其中低位字送IP寄存器,高位字送CS寄存器。
zfsoft2206 2009-07-18
  • 打赏
  • 举报
回复
1、使用LJMP,AT&T和INTEL都支持,比如AT&T的
ljmpl $段基址或者选择符, $段内偏移

2、使用LCALL,进行远程调用
lcall 段基址(这个要存在4个段寄存器里面):(段内偏移)

3、使用PUSHL,把地址存在CALL调用后返回后自动装载EIP里,就是2楼的第二种方法,比如LINUX的HEAD.s有这样的例子:
after_page_tables:
pushl $0
pushl $0
pushl $0
pushl $L6
pushl $main
jmp setup_paging

4、似乎linux里面的系统调用算的上是一种段间调用吧

5、2楼的第一种方法

21,453

社区成员

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

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