gpt4 book ai didi

汇编无限循环(jmp -2)

转载 作者:行者123 更新时间:2023-12-05 01:01:59 24 4
gpt4 key购买 nike

我听说使用 jmp -2 我们可以进行无限循环。这听起来很奇怪,但是在解释了相对跳转需要一个字节之后,下一条指令地址(eip)将比 jmp 地址少 2 个字节。所以,我决定实现它,但我无法让它发挥作用。
这是我的源代码:

SECTION .text

global main
main:
push ebp
mov esp, ebp
jmp 0x-2
leave
ret

并用它来编译:

nasm -f elf asmloop.asm -o objasmloop.o 

 ld -m elf_i386 -o execasmloop -e main objasmloop.o  

我也尝试使用 -2 (FE) 的十六进制值,但仍然出现段错误。毕竟,我用GDB反汇编了一下:

Dump of assembler code for function main:
0x08048060 <+0>: push %ebp
0x08048061 <+1>: mov %ebp,%esp
0x08048063 <+3>: jmp 0xfffffffe
0x08048068 <+8>: leave
0x08048069 <+9>: ret

我能够在这个转储中看到 jmp 地址和离开地址之间的实际差异实际上是 5 个字节(它没有使用短引用 jmp)。但是我尝试了这个,结果是一样的(段错误)。我怎样才能执行那种无限循环?

最佳答案

jmp -2至少在 NASM 中会跳转到地址 -2(或 0ff..fffeh)。
据我所知,直接跳转的操作数始终是目标地址,将编码在操作码中的相对立即数的计算留给汇编程序。

简而言之,jmp SHORT -2如果放置在偏移量 0 处,则组装为 EB FC可以看到,使用新语法,如 jmp <-4>因为 2+(-4) = -2。

如果你想制作操作码,你需要恢复到伪指令 db , dw等等。

如果您只是想在没有标签的情况下循环,您可以随时使用 $符号,表示当前指令/符号的偏移量/地址/计数器。
所以一个jmp <-2>只是一个 jmp $ ,对于放置在零的跳转,等于 jmp 0并组装为 EB FE如你所料。

存在 $一个符号,你可以对其进行普通的算术运算:jmp $-2EB FCjmp <-4> .

关于汇编无限循环(jmp -2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38105432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com