C++笔记-二级指针在反汇编中的形式
生活随笔
收集整理的這篇文章主要介紹了
C++笔记-二级指针在反汇编中的形式
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
下面的程序都是x86程序。32位的程序
如下代碼:
#include <iostream> using namespace std;void test() {cout << "Hello World" << endl; }int main(int argc, int *argv[]) {int *p = new int(10);int **pp = &p;cout << pp << endl;test();getchar();return 0; }先看下Debug版的反匯編:
上面是main函數(shù)的,看看test()函數(shù)
從中可以看到還是代碼還是比較多的,主要是看release版本。Debug版本稍微過(guò)一下。
32位機(jī)器編譯出來(lái)程序函數(shù)前都是
push ebp mov ebp, esp進(jìn)入函數(shù)時(shí)要保存ebp的值。進(jìn)入函數(shù)后存esp的值。方便進(jìn)行堆棧內(nèi)的尋址,函數(shù)返回要恢復(fù)ebp的值。
從上面可以看到調(diào)用函數(shù)一般就是使用call。
看下和二級(jí)指針相關(guān)的反匯編代碼:
lea eax, [p] mov dword ptr [pp], eaxLEA為數(shù)據(jù)傳輸指令,[p]為p地址內(nèi)的值(因?yàn)槭侵羔?#xff0c;這個(gè)值也是地址)給eax。
然后使用mov指令把eax里面放的這個(gè)地址,以地址的形式放到pp中。
?
下面是release版本的反匯編:
?
從這里可以看到test()函數(shù)被優(yōu)化了,并且整個(gè)程序都變成十分簡(jiǎn)潔。Release版本還是比較6。
這里可以看到**pp被優(yōu)化了,在反匯編中可以看到,他僅僅是操作了指針p。
?
?
這里空間沒(méi)釋放,在此補(bǔ)下代碼:
#include <iostream> using namespace std;void test() {cout << "Hello World" << endl; }int main(int argc, int *argv[]) {int *p = new int(10);int **pp = &p;cout << pp << endl;test();getchar();delete p;return 0; } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的C++笔记-二级指针在反汇编中的形式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: QML工作笔记-Key Element的
- 下一篇: s3c2440移植MQTT