アプリ版:「スタンプのみでお礼する」機能のリリースについて

GDBに詳しい方、教えてください。

gdb8.2.1(gccは8.3.0を使っています。)を使っているのですが、以下のアセンブルコードのデバッグで、以前の32ビットのヴァージョンでの表示の書き方ができなくなっている様なのですが、64ビットのヴァージョンでは以下の(1)〜(3)は、どの様に書いたら良いのでしょうか?


(1)(gdb) x/w &num
変数numのアドレス値の内容を表示するのですが、
「Can't take address of "num" which isn't an lvalue.」
となってしまいます。

(2)
(gdb) print num
変数numの内容を表示($1 = 6)するのですが、
$1 = num
となってしまいます。

(3)
(gdb) print/c (char[6])string
配列stringの要素を6つのchar型と仮定して表示するのですが、
Invalid cast.
となってしまいます。

(アセンブルコード)
.file "examgdb.s"
.data
num: .long 0x6
string: .ascii "abcdef"
iarray: .word 0x1234, 0x5678, 0x9abc, 0xdef0, 0x1234, 0xffff
.text
.globl main
main:
movl $0, %esi
looptop:
movb string(%esi), %al
movw iarray( , %esi , 2 ), %dx
incl %esi
cmpl num, %esi
jb looptop
endloop:
ret

質問者からの補足コメント

  • >apt-get install libc6-dev-i386

    で32ビット版のパッケージをインストルーして、

    >gcc -m32 examgdb.s

    で実行すると上記と同じ結果になりました。

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/02/09 09:45

A 回答 (2件)

先の件と同じく、Debian 10.7、gcc (GCC) 10.1.0, gdb (GDB) 9.2環境でのテストです。


$ gcc -g examgdb.s
$ gdb a.out
(gdb) x/w &num
0x404028: 6
(gdb) print num
'num' has unknown type; cast it to its declared type
(gdb) print/c (char[6])string
$1 = {97 'a', 98 'b', 99 'c', 100 'd', 101 'e', 102 'f'}
(gdb)
の様に表示されます。
この回答への補足あり
    • good
    • 0

NO1です。

失礼しました。以下を追加します。

$ file a.out
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, with debug_info, not stripped
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!