У меня есть простой код NASM, как показано ниже. Я хочу установить значение 43 (которое является смещением +3 в массиве trx
) на значение 99
.
section .data
trx db 25,21,17,43
section .text
global _start
_start:
mov [trx+3], byte 99
last:
mov rax, 60
mov rdi, 0
syscall
Когда я отлаживаю и функция _start пройдена, это работает. Значение 43
изменено на 99
.
(gdb) i var
All defined variables:
Non-debugging symbols:
0x00000000006000c4 trx
0x00000000006000c8 __bss_start
0x00000000006000c8 _edata
0x00000000006000c8 _end
(gdb) x/4b &trx
0x6000c4: 25 21 17 43
(gdb) break _start
Breakpoint 1 at 0x4000b0
(gdb) run
Starting program: /home/hexdemsion/Desktop/asm/exec
Breakpoint 1, 0x00000000004000b0 in _start ()
(gdb) stepi
0x00000000004000b8 in last ()
(gdb) x/4b &trx
0x6000c4: 25 21 17 99
Теперь, как я могу установить это значение непосредственно в GDB? Я пробовал эту команду в GDB, но все еще не работает.
(gdb) set 0x00000000006000c4+3 = 99
Left operand of assignment is not an lvalue.
(gdb) set {int}0x00000000006000c4+3 = 99
Left operand of assignment is not an lvalue.
(gdb) set {b}0x00000000006000c4+3 = 99
No symbol table is loaded. Use the "file" command.
Кроме того, я не предоставляю отладочную информацию во время сборки.
nasm -f elf64 -o obj.o source.asm; ld -o exec obj.o