日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

arm32 linux 内存分布,gcc代码反汇编查看内存分布[2]: arm-linux-gcc

發布時間:2023/11/27 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 arm32 linux 内存分布,gcc代码反汇编查看内存分布[2]: arm-linux-gcc 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

arm-none-linux-gnueabi-gcc -v

gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202)

重點:

代碼中的內存分配, 地址從低到高: 代碼段(RO, 保存函數代碼) --> 只讀數據段(RO, 保存常量) --> 數據段(RW, 已初始化并且初始值不為0的全局變量和靜態變量) -->bss段(RW,? 未初始化或者初始化為0的全局變量和靜態變量).

程序運行起來之后, 堆區和棧區的變量地址是動態分配的.

可以看出arm-none-linux-gnueabi-gcc編譯和gcc編譯結果是類似的.

#include

#include

int global_ni; // .bss

int global_iz = ; // .bss

int global_inz = ; // .data

const int global_const0 = ;

const int global_const1 = ;

void function(void)

{

int local_fni;

int local_finz = ;

int local_fiz = ;

static int static_fni;

static int static_finz = ;

static int static_fiz = ;

int *p2 = (int*)malloc(sizeof(int));

printf("子函數 局部變量 : \n");

printf(" local_fni: %p \n", &local_fni);

printf(" local_finz: %p \n", &local_finz);

printf(" local_fiz: %p \n", &local_fiz);

printf("子函數 靜態變量 : \n");

printf(" static_fni: %p \n", &static_fni);

printf(" static_finz: %p \n", &static_finz);

printf(" static_fiz: %p \n", &static_fiz);

printf("子函數 指針變量 : \n");

printf(" p2 : %p \n", p2);

printf("子函數地址 : \n");

printf(" function : %p \n", function);

}

int main(int argc, char **argv)

{

int local_mni;

int local_minz = ;

int local_miz = ;

static int static_mni;

static int static_minz = ;

static int static_miz = ;

int *p1 = (int*)malloc(sizeof(int));

const int local_const0 = ;

const int local_const1 = ;

char* str_ptr = "char";

printf("主函數 局部變量 : \n");

printf(" local_mni : %p \n", &local_mni);

printf(" local_minz : %p \n", &local_minz);

printf(" local_miz : %p \n", &local_miz);

printf("const 變量: \n");

printf(" local_const0 : %p \n", &local_const0);

printf(" local_const1 : %p \n", &local_const1);

printf(" global_const0 : %p \n", &global_const0);

printf(" global_const1 : %p \n", &global_const1);

printf("主函數 malloc指針變量 : \n");

printf(" p1 : %p \n", p1);

printf("全局變量 : \n");

printf(" global_ni : %p \n", &global_ni);

printf(" global_inz : %p \n", &global_inz);

printf(" global_iz : %p \n", &global_iz);

printf("主函數 靜態變量 : \n");

printf(" static_mni: %p \n", &static_mni);

printf(" static_minz: %p \n", &static_minz);

printf(" static_miz: %p \n", &static_miz);

printf("字符串常量 : \n");

printf(" str_ptr : %p \n", str_ptr);

printf("主函數地址 : \n");

printf(" main : %p \n", main);

printf("= = = = = = = = = = = = = = = \n");

function();

return ;

}

/*

= = = = = = = = = = = = = = =

測試:

arm-none-linux-gnueabi-gcc -o test main.c

arm-none-linux-gnueabi-objdump -Dhs test > test.dis

分析:

Disassembly of section .text: 000083e0

{

子函數地址 :

function :

主函數地址 :

main :

}

Disassembly of section .rodata: 000088c0

{

const 變量: 全局

global_const0

global_const1

字符串常量 : str_ptr

}

//.data中是初始化為非0的全局變量和靜態變量

Disassembly of section .data: 00010d5c

{

global_inz

static_minz

static_finz

}

//.bss中是初始化為0以及沒有初始化的全局變量和靜態變量

Disassembly of section .bss: 00010d70

{

global_iz

static_mni

static_miz

static_fni

static_fiz

global_ni

}

堆空間: //動態的

{

主函數 malloc指針變量 :

p1 :

子函數 malloc指針變量 :

p2 :

}

棧空間: //動態的

{

子函數 局部變量 :

local_fiz :

local_finz:

local_fni :

const 變量: 局部

local_const1 :

local_const0 :

主函數 局部變量 :

local_miz :

local_minz:

local_mni :

}

*/

反匯編文件test.dis節選

test: file format elf32-littlearm

Sections:

Idx Name Size VMA LMA File off Algn

.interp **

CONTENTS, ALLOC, LOAD, READONLY, DATA

.note.ABI-tag **

CONTENTS, ALLOC, LOAD, READONLY, DATA, LINK_ONCE_SAME_CONTENTS

.hash 0000003c **

CONTENTS, ALLOC, LOAD, READONLY, DATA

.dynsym 000000a0 000081a4 000081a4 000001a4 **

CONTENTS, ALLOC, LOAD, READONLY, DATA

.dynstr 000000a7 **

CONTENTS, ALLOC, LOAD, READONLY, DATA

.gnu.version 000082ec 000082ec 000002ec **

CONTENTS, ALLOC, LOAD, READONLY, DATA

.gnu.version_r **

CONTENTS, ALLOC, LOAD, READONLY, DATA

.rel.dyn **

CONTENTS, ALLOC, LOAD, READONLY, DATA

.rel.plt **

CONTENTS, ALLOC, LOAD, READONLY, DATA

.init 0000000c **

CONTENTS, ALLOC, LOAD, READONLY, CODE

.plt 0000005c **

CONTENTS, ALLOC, LOAD, READONLY, CODE

.text 000004d8 000083e0 000083e0 000003e0 **

CONTENTS, ALLOC, LOAD, READONLY, CODE

.fini 000088b8 000088b8 000008b8 **

CONTENTS, ALLOC, LOAD, READONLY, CODE

.rodata 000088c0 000088c0 000008c0 **

CONTENTS, ALLOC, LOAD, READONLY, DATA

.ARM.extab 00008bd4 00008bd4 00000bd4 **

CONTENTS, ALLOC, LOAD, READONLY, DATA

.ARM.exidx 00008bf8 00008bf8 00000bf8 **

CONTENTS, ALLOC, LOAD, READONLY, DATA

.init_array 00010c38 00010c38 00000c38 **

CONTENTS, ALLOC, LOAD, DATA

.fini_array 00010c3c 00010c3c 00000c3c **

CONTENTS, ALLOC, LOAD, DATA

.jcr 00010c40 00010c40 00000c40 **

CONTENTS, ALLOC, LOAD, DATA

.dynamic 000000f0 00010c44 00010c44 00000c44 **

CONTENTS, ALLOC, LOAD, DATA

.got 00010d34 00010d34 00000d34 **

CONTENTS, ALLOC, LOAD, DATA

.data 00010d5c 00010d5c 00000d5c **

CONTENTS, ALLOC, LOAD, DATA

.bss 0000001c 00010d70 00010d70 00000d70 **

ALLOC

.ARM.attributes 0000002b 00000d70 **

CONTENTS, READONLY

.comment 0000002b 00000d9b **

CONTENTS, READONLY

.debug_frame 00000dc8 **

CONTENTS, READONLY, DEBUGGING

gcc代碼反匯編查看內存分布[1]: gcc

# gcc -vgcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) 重點: 代碼中的內存分配, 地址從低到高: 代碼段(RO, 保存函數代碼) --&g ...

Ubuntu12.4 64位 安裝 arm linux gcc 4.3.2

一.下載arm linux gcc 4.3.2 http://pan.baidu.com/share/link?shareid=1575352696&uk=2754759285&fid ...

代碼內存泄露檢測工具(linux gcc + valrind)

參考博客: https://www.cnblogs.com/wangkangluo1/archive/2011/07/20/2111248.html linux命令如下:valgrind --tool ...

轉載:C++類內存分布

本文轉自:http://www.cnblogs.com/jerry19880126/p/3616999.html,原文寫的非常好,從中學到了虛繼承的概念,也學會了用VS查看內存分布. 說下C++內存分 ...

C語言內存分布

C語言內存分布 典型的C語言程序內存表示分區共有5個部分: 正文段 Text segment 已初始化數據段(數據段)Initialized data segment 未初始化數據段(bss)Unin ...

使用匯編分析c代碼的內存分布

arm平臺下使用反匯編分析c內存分布: arm:使用arm-linux-objdump命令將編譯完畢之后的elf文件,進行反匯編. 之后重定向到tmp.s文件里. 第一步變量例如以下c文件. vim ...

C語言中內存分布及程序運行中(BSS段、數據段、代碼段、堆棧)

BSS段:(bss segment)通常是指用來存放程序中未初始化的全局變量的一塊內存區域.BSS是英文Block Started by Symbol的簡稱.BSS段屬于靜態內存分配. 數據段?: ...

淺析VS2010反匯編 VS 反匯編方法及常用匯編指令介紹 VS2015使用技巧 調試-反匯編 查看C語言代碼對應的匯編代碼

淺析VS2010反匯編 2015年07月25日 21:53:11 閱讀數:4374 第一篇 1. 如何進行反匯編 在調試的環境下,我們可以很方便地通過反匯編窗口查看程序生成的反匯編信息.如下圖所示. ...

[GeekBand] C++繼承關系下虛函數內存分布

本文參考文獻:GeekBand課堂內容,授課老師:侯捷 :深度探索C++對象模型(侯捷譯) :網絡資料,如:http://blog.csdn.net/sanfengshou/article/detai ...

隨機推薦

Remove WebCakeDesktop

WebCakeDesktop.Updater.exe 是廣告程序,卸載步驟參考 http://malwaretips.com/blogs/webcake-desktop-updater-exe-rem ...

javascript 通過IE ActiveX 獲得本機內網ip

WMI Scripting HTML

數據庫數據用Excel導出的3種方法

將數據庫數據用Excel導出主要有3種方法:用Excel.Application接口.用OleDB.用HTML的Tabel標簽 方法1——Excel.Application接口: 首先,需要要Exce ...

圖片與字符串(base64編碼)的轉化

package com.demo; import java.util.*; import java.io.*; import sun.misc.BASE64Decoder; import sun.mi ...

thinkphp3.2.3的使用心得(零)

從模板傳參到控制器 模板中代碼:

Chained Exceptions in Java

1. Overview In this article, we’ll have a very brief look at what?Exception?is and go in depth about ...

git 創建SSH key

可以自己搭建一臺運行Git的服務器,不過現階段,為了學Git先搭個服務器絕對是小題大作.好在這個世界上有個叫GitHub的神奇的網站,從名字就可以看出,這個網站就是提供Git倉庫托管服務的,所以,只要 ...

總結

以上是生活随笔為你收集整理的arm32 linux 内存分布,gcc代码反汇编查看内存分布[2]: arm-linux-gcc的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。