Fab*_*otk 5 assembly gdb x86-64 gnu-assembler
我试图通过更改其中的一个字节来修改存储在内存中的字符串。我为此使用movb,但是由于某些原因,给定存储位置的字节未更改。
在gdb调试器上:
14 movb%al,(%r10)#next instr
(gdb)print / d $ al
$ 4 = 0
(gdb)print / c * $ r10
$ 5 = 47'/'
(gdb)s
16 mov $ 59,%rax
(gdb )打印/ c * $ r10
$ 6 = 47'/'
代码只是:
.globl _start
.text
_start:
call chamaexecve
variaveis:
.asciz "/bin/bashABBBBCCCC"
chamaexecve:
pop %r10
xor %rax, %rax
movb %al, (%r10) # problem happening here
mov $59, %rax
mov %rsi, %rdi
mov $0, %rsi
mov $0, %rdx
syscall
Run Code Online (Sandbox Code Playgroud)
它正在与as -gstabs -o shellf.o shellf.s-ld -N -z execstack -o shellf shellf.o
编辑为了确保没有记错,我删除了可执行文件并重新编译。错误仍然存在。我注意到的另一件事是,如果我movb $'r', %al在将%al移至内存之前添加了一行,'r'则通常会在内存上打印该行,但由于某种原因,它无法使用该$0值。
我正在Linux Mint 18.1“ Serena”滚动版本gnu汇编程序2.26.1上运行此代码。这是x/i $rip用于显示当前指令的打印件:
Edit2:将break更改为tbreak并将s更改为si之后,我终于看到它从'/'变为'\ 000'。那么,在s / break / gdb全部搞砸之后,可能是什么问题呢?
(gdb)tb 14
临时断点1位于0x4000cd:文件shellf.s,第14行。
(gdb)run
启动程序:/ home / fabio /criação/ nasm-tutorial / shellf
临时断点1,位于shellf.s的chamaexecve(): 14
14 movb%al,(%r10)
(gdb)si
16 mov $ 59,%rax
(gdb)print / c * $ rsi
无法访问地址0x0
(gdb)的内存print / c * $ r10
$ 1 = 0'\ 000 '
(gdb)
| 归档时间: |
|
| 查看次数: |
465 次 |
| 最近记录: |