2017-11-10 8 views
0
Dump of assembler code for function main(): 
    0x000000000000071a <+0>: push rbp 
    0x000000000000071b <+1>: mov rbp,rsp 
    0x000000000000071e <+4>: sub rsp,0x20 
    0x0000000000000722 <+8>: mov rax,QWORD PTR fs:0x28 
    0x000000000000072b <+17>: mov QWORD PTR [rbp-0x8],rax 
    0x000000000000072f <+21>: xor eax,eax 
    0x0000000000000731 <+23>: lea rax,[rbp-0x20] 
    0x0000000000000735 <+27>: mov rdi,rax 
    0x0000000000000738 <+30>: call 0x764 <Test::Test()> 
    0x000000000000073d <+35>: lea rax,[rbp-0x20] 
    0x0000000000000741 <+39>: mov rdi,rax 
    0x0000000000000744 <+42>: call 0x7ae <Test::a()> 
    0x0000000000000749 <+47>: mov eax,0x0 
    0x000000000000074e <+52>: mov rdx,QWORD PTR [rbp-0x8] 
    0x0000000000000752 <+56>: xor rdx,QWORD PTR fs:0x28 
    0x000000000000075b <+65>: je  0x762 <main()+72> 
    0x000000000000075d <+67>: call 0x5f0 <[email protected]> 
    0x0000000000000762 <+72>: leave 
    0x0000000000000763 <+73>: ret  
End of assembler dump. 

私は問題があります。プログラムをデバッグしようとしていますが、アドレスが奇妙で、レジスタを読み込めません。 "The program has no registers now." これは私のコンピュータでコンパイルしたプログラムで発生します。GCC/G ++のアドレスであり、レジスタを読み取ることができません。

EDIT:

gef➤ break*0x0000000000000763 
Breakpoint 1 at 0x763: file 1.cpp, line 36. 
gef➤ r 
Starting program: /root/Desktop/Challenges/AdvancedMemoryChallenges/1.bin 
Warning: 
Cannot insert breakpoint 1. 
Cannot access memory at address 0x763 

gef➤ info reg $rip 
rip   0x7ffff7dd9c20 0x7ffff7dd9c20 
gef➤ 
gef➤ start 
[+] Breaking at '{int (void)} 0x55555555471a <main()>' 
[!] Command 'entry-break' failed to execute properly, reason: Warning: 
Cannot insert breakpoint 1. 
Cannot access memory at address 0x763 
+0

これは、方法の記載がありません。あなたはそれをどのように構築するのですか、それをどうやって始めるのですか?ちょっと話題になるかもしれません... – unwind

+0

[編集]であなたの質問を明確にできますか? – LW001

+0

質問を編集しました。問題を理解していただきたいと思います。 :P – Th3Niel

答えて

1

0x763は移転前のアドレスです。 (オブジェクトファイルか実際の実行可能ファイルのどちらであるかは不明です)

実行中のプログラムのコードのアドレスは、決してこのアドレス空間では低くありません。

_startまたはmainにブレークポイントを設定し、プログラムを起動し、カーネルが問題のマシンコードに割り当てるアドレスを確認する必要があります。 GDB disassembleコマンドprintはそのようなアドレスを出力します。

GDBはアドレス空間レイアウトのランダム化(ASLR)を自動的に無効にするため、プログラム、ライブラリ、またはカーネルを変更しない限りアドレスは一定になります(プロセスレイアウトも変更されることがあります)。

関連する問題