嗨我想找到我的數據存儲在哪裏的內存地址。我的代碼的內存地址是什麼?
這是函數的彙編代碼。
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)還是我完全錯誤地思考?