2010-11-13 62 views
2

嗨我想找到我的數據存儲在哪裏的內存地址。我的代碼的內存地址是什麼?

這是函數的彙編代碼。

0x08048b20 <+0>:  push %ebp 
    0x08048b21 <+1>:  mov %esp,%ebp 
    0x08048b23 <+3>:  sub $0x28,%esp 
    0x08048b26 <+6>:  lea -0x14(%ebp),%eax 
    0x08048b29 <+9>:  mov %eax,(%esp) 
    0x08048b2c <+12>: call 0x8048990 <Gets> 
    0x08048b31 <+17>: mov $0x1,%eax 
    0x08048b36 <+22>: leave 
    0x08048b37 <+23>: ret 

我的數據是一個字符串存儲在-0x14(%ebp) - (非常肯定)。我知道返回地址應該是4(%ebp)。我想要做的是設置返回地址指向我的代碼。我不能使用程序集來做到這一點。我需要知道我的函數開始位置(我知道它存儲在-0x14(%ebp))的確切位置。任何人都可以幫助我如何獲得該位置的內存位置?在這條線上

0x08048b20 <+0>:  push %ebp 

的0x08048b20

的地址是我的,而不是%EBP權函數的內存位置?我的想法是,如果我獲得%ebp的內存位置,我可以計算我的函數開始位置的內存位置。

我使用gdb,我不知道如何獲取它的內存地址? 請,任何幫助,將不勝感激。 謝謝。

編輯: 當我在行< +6站在>在彙編代碼中,我打印的%ebp和%的值ESP,和他們有0×28確切的差異應該像他們。所以我假設%ebp的地址是我在gdb中打印時獲得的值。

但是,當我從這個值(0xbfffb5d8)減去0x14給0xbfffb5c4;它不知道要跳到哪裏。如果我在-0x14(%ebp)存儲了我的字符串(實際上是反彙編代碼的字節碼),並且我想運行該代碼;我不應該把返回地址設置爲-0x14(%ebp)還是我完全錯誤地思考?

回答

0

在函數的第一行之前放置一個標籤。然後,引用標籤將爲您提供編譯函數中第一個操作碼的地址。不幸的是,我不明白你的問題足以幫助你。

相關問題