gdb:如何反汇编非指令代码?
在nasm中有这个:gdb:如何反汇编非指令代码?,gdb,nasm,disassembly,Gdb,Nasm,Disassembly,在nasm中有这个: section .data cod: db '0123456789ABCDEF' section .text global _start _start: nop mov rax, 0x1122334455667788 mov rdi, 1 mov rdx, 1 mov rcx, 64 .loop: push rax sub rcx, 4 sar rax, cl and rax, 0xf le
section .data
cod: db '0123456789ABCDEF'
section .text
global _start
_start:
nop
mov rax, 0x1122334455667788
mov rdi, 1
mov rdx, 1
mov rcx, 64
.loop:
push rax
sub rcx, 4
sar rax, cl
and rax, 0xf
lea rsi, [cod + rax]
mov rax, 1
push rcx
syscall
pop rcx
pop rax
test rcx, rcx
jnz .loop
mov rax, 60
xor rdi, rdi
syscall
gdb中的:
disas\u开始循环
给予:
尝试提取非结构值的组件。
如何取消gdb中的循环
PS:我也想知道,gdb中的结构是什么意思。我想,它与c
structs无关,而是与函数框架有关?所以gdb可以看到函数的开始和结束位置?在我的例子中,它是一个循环,不是一个函数,所以它没有任何帧。这是错误的意思吗
编辑:
我尝试过加入gdb:
(gdb) break *_start+1
Breakpoint 1, 0x0000000000401001 in _start ()
(gdb) n
Single stepping until exit from function _start,
which has no line number information.
然后输出
1122334455667788[次品1(流程6257)正常退出]
但是,我没有看到来自
循环的任何指令,它只是从_start退出。
我不知道这是因为
.loop
nasm指令还是没有“struct behavior”,但在退出\u start
之前,我如何才能在gdb中看到.loop
代码段 .loop不是一个指令。这只是goto的一个标签。好吧,但无论如何,为什么gdb不想在它之后显示代码(而是先退出)?为什么gdb会这样做,未知,但为了解决您的问题,我将.loop
更改为loop
,它可以工作。我认为这可能与循环
是一条指令有关,但是.lmp
做了同样的事情。@牧民,我不知道。我从来没有遇到过这个问题。在它周围加上引号,这样gdb就不会认为它是C结构元素<代码>禁用“\u start.loop”。loop不是指令。这只是goto的一个标签。好吧,但无论如何,为什么gdb不想在它之后显示代码(而是先退出)?为什么gdb会这样做,未知,但为了解决您的问题,我将.loop
更改为loop
,它可以工作。我认为这可能与循环
是一条指令有关,但是.lmp
做了同样的事情。@牧民,我不知道。我从来没有遇到过这个问题。在它周围加上引号,这样gdb就不会认为它是C结构元素<代码>disas'\u start.loop'