GDB - вывести значение с плавающей запятой из сборки - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть следующий код, где b инициализируется значением с плавающей запятой 123.45 :

global _start

section .data

    ;a : dw 999     ; declare word
    b : dq 123.45  ; declare quad word (double precision)

section .bss

    res : resq 1   ; reserve 1 quad word for result

section .text

    _start :

        nop

Я создаю файл объекта (sanityTest.o) и исполняемый файлФайл (sanityTest) выглядит следующим образом.Я работаю на компьютере x64:

nasm -f elf64 -F dwarf -g sanityTest.asm -o sanityTest.o

ld -m elf_x86_64 -o sanityTest sanityTest.o

Затем я пытаюсь прочитать значение b в GDB следующим образом:

(gdb) file sanityTest
Reading symbols from sanityTest...done.
(gdb) break _start
Breakpoint 1 at 0x4000b0
(gdb) run
Starting program:
Breakpoint 1, 0x00000000004000b0 in _start ()
(gdb) print b
$1 = -858993459
(gdb) print/f b
$2 = -107374184
(gdb)

Почему ни print b, ни print/f b отобразить значение 123.45 ?


Дополнительная информация:

Если я скомпилирую код с закомментированной строкой b : dq 123.45и строка a : dw 999 без комментариев, я могу вывести целочисленное значение a из 999 :

(gdb) p a
$1 = 999

Если я скомпилирую обе строки без комментариев, я могу напечататьни a, ни b.Значение для b такое же, как и раньше, и я понятия не имею, что сейчас печатается для a:

(gdb) p a
$1 = -858979353
(gdb) p b
$2 = -858993459
(gdb) p/f a
$3 = -107487032
(gdb) p/f b
$4 = -107374184
...