int intGloa=0;
char c='a';
int main(){
int b;
char s[]="abcdefghigkmnl";
char * pChar="您好吗";
static int sintC=88888;
static float flsB=888.888;
return 0;
}
.file "demo7.c"
.intel_syntax noprefix
.globl _intGloa
.bss
.align 4
_intGloa:
.space 4
.globl _c
.data
_c:
.byte 97
.def ___main; .scl 2; .type 32; .endef
.section .rdata,"dr"
LC1:
.ascii "\304\372\272\303\302\360\0"
LC0:
.ascii "abcdefghigkmnl\0"
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
push ebp
mov ebp, esp
and esp, -16
push edi
push esi
push ebx
sub esp, 36
call ___main
lea edx, [esp+13]
mov ebx, OFFSET FLAT:LC0
mov eax, 15
mov edi, edx
mov esi, ebx
mov ecx, eax
rep movsb
mov DWORD PTR [esp+28], OFFSET FLAT:LC1
mov eax, 0
add esp, 36
pop ebx
pop esi
pop edi
leave
ret
.data
.align 4
_flsB.1221:
.long 1147025621
.align 4
_sintC.1220:
.long 88888
内存区 | 含义 | 寄存器 |
栈 | 用来存放函数形参,与函数内变量,栈的压与出由代码区代码负责生成相关代码 | ebp:栈基址寄存器 esp:栈指针 |
堆 | 用malloc、calloc、realloc函数分配的空间,空间的释放由程序员自己处理 | |
全局区 | 进程加载就分配了空间,直到进种程结束。存放全局变量与静态变量 | ds:数据段寄存器存基址 |
文字区 | 为了加快程序速度,在编译时把字符串放在文字区,进程起动就分配空间了,其实也是属于全局区。 | |
代码区 | 存放程序代码区 | cs:代码段基地址 eip:存放下条代码偏移量 |
C代码 | 汇编 |
int intGloa=0; | _intGloa: .space 4 |
char c='a'; | .globl _c.data _c:.byte 97 c语言的ascill字符当作整形数存在 |
char s[]="abcdefghigkmnl"; | LC0:.ascii "abcdefghigkmnl\0"。汇编生成标签,其后添加\0表示结束,所以判断一个字符串是否结束可以用\0来判断 |
char * pChar="您好吗"; | LC1:.ascii "\304\372\272\303\302\360\0"。中文用相应字符编码表示 |
static int sintC=88888; | _flsB.1221: .long 1147025621 .align 4 对象对齐方式与二进制值 |
5、总结:基本上是按照汇编程序的方式进行分段
评论