Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gdb:如何反汇编非指令代码?_Gdb_Nasm_Disassembly - Fatal编程技术网

gdb:如何反汇编非指令代码?

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

在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
    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'