簡體   English   中英

GDB 調用不在 main 中的 function

[英]GDB calling a function that is not in main

我的教授給了我們一個任務,讓我們逐步通過 c 程序使用 GDB 生成的 x86 指令來查找密碼。 我們的工作是通過 6 個階段對 go 並找到隱藏在 x86 指令中某處的密碼。 我能夠通過所有這些 go 但最后我注意到在 x86 文件中,有一個名為 secret_phase 的 function。 我的理解是,如果我們完成了 secret_phase,我們將獲得額外的功勞。 問題是,從未從主 function 調用 secret_phase,所以我什至不知道如何訪問它。 有什么方法可以從 GDB 調用 secret_phase function?

如果您是一個樂觀主義者,並且希望secret_phrase例如在屏幕上打印秘密短語,那么請執行以下操作:

break main
run
call ((void(*)()) secret_phrase)()

在這里,您指定要調用的函數原型,猜測是它不帶參數也不返回任何值。 如果您期望如此,例如將秘密短語返回為char* ,則可以嘗試:

print ((char*(*)()) secret_phrase)()

或其他任何返回類型,但這只是猜測。

一種更嚴格的方法是跳轉到該函數,可以在任何執行點執行:

break main
run
break secret_phrase
jump secret_phrase

(請注意第二個中斷,如果不執行該中斷,它將立即執行,並且很可能由於您跳轉到函數而不是調用它而導致程序崩潰)。 確認后,調試器將在secret_phrase的開頭停止。 小心執行stepi ,一旦執行retn指令,程序可能會崩潰。 但是您將有機會仔細檢查該功能。

除了所有這些,您可能應該從disassemble secret_phrase開始,以尋找線索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM