gpt4 book ai didi

gdb - NASM 和 GDB : losing first instruction

转载 作者:行者123 更新时间:2023-12-04 23:58:46 26 4
gpt4 key购买 nike

我正在学习汇编程序,发现以下一些令人惊讶。我基本上从互联网上的某个地方复制了一些 hello world 代码

section .text
global _start

_start:
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80 ; interrupt for calling kernel

mov eax,1
int 0x80

section .data

msg db 'Hello, world!',0xa
len equ $ - msg

我用 nasm -f elf -g hellow.asm, ld hellow.o -o hellow 编译并链接它。如果我现在将它加载到 gdb 中,我可以列出代码并运行它。如果我在第一条 mov 指令上放置断点,程序不会停在那里。在我得到的结果文件上运行 ndisasm (ndisasm -b32 hellow)(我认为相关的部分):

0000007D  0000              add [eax],al
0000007F 00BA0E000000 add [edx+0xe],bh
00000085 B9A0900408 mov ecx,0x80490a0
0000008A BB01000000 mov ebx,0x1
0000008F B804000000 mov eax,0x4
00000094 CD80 int 0x80
00000096 B801000000 mov eax,0x1
0000009B CD80 int 0x80

所以指令没有出现。

如果能提示正在发生的事情,或者去哪里了解正在发生的事情,我将不胜感激。

最佳答案

您的指令在反汇编中没有正确显示的原因只是它开始反汇编的位置以及指令如何落下的对齐问题。因为 x86 有变长指令,反汇编器需要知道入口点。正确的 list 更像是:

00000080  BA0E000000      mov edx,0xe ; I think
00000085 B9A0900408 mov ecx,0x80490a0
...

真正的问题似乎是 gdb,可能是你如何设置断点(另外,我不记得 gdb 是否在第一条指令之前中断,我必须检查一下)。

关于gdb - NASM 和 GDB : losing first instruction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4248326/

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