C指针原理(94)-汇编基础(1)

来源:互联网 发布:mac免费软件下载网站 编辑:程序博客网 时间:2024/05/21 19:30

AT&T汇编语语言中的数据段与数据类型

.data段定义的数据元素保留在内存中能够被指令读取和写入;
.rodata段定义的数据元素只读;

.data.rodata段的数据类型:
1) .ascii 代表文本字符串类型
2) .asciz 代表以空字符结尾的文本字串,在C中以空代表串的结尾
3) .byte 代表一个字节值
4) .double 双精度浮点数
5) .float 单精度浮点数
6) .int 代表32位整数
7) .long 代表32位整数IA-32
8) .octa 代表16字节整数
9) .quad 代表8字节整数
10) .short 代表16位整数
11) .single 单精度浮点数 32

   同时可以使用.fill自动创建10000个数据元素,默认为每个字段创建一个字长,并使用零填充它。

.data.rodata段中定义的数据将从内存地址由低到高排列。编写一段简单的汇编代码

dp@dp:~ % cat test.s

.section .data

mybuffer:

   .fill 100

.section .rodata

mytext:

   .ascii "abcde"

val1:

    .byte 'a'

val2:

    .byte 'b'

    .byte 'c'

.section .text

.globl _start 

_start:

   movl mytext,%eax

   movl val1,%ebx 

 

dp@dp:~ % 

从对上面程序的反汇编可看出,内存地址从低到高放置了mytext0804807f )、val108048084 )、val208048085)、mybuffer

dp@dp:~ % objdump -D test

 

test:     file format elf32-i386-freebsd

 

Disassembly of section .text:

 

08048074 <_start>:

 8048074:a1 7f 80 04 08       mov    0x804807f,%eax

 8048079:8b 1d 84 80 04 08    mov    0x8048084,%ebx

Disassembly of section .rodata:

 

0804807f <mytext>:

 804807f:61                   popa   

 8048080:62 63 64             bound  %esp,0x64(%ebx)

 8048083:65                   gs

 

08048084 <val1>:

 8048084:61                   popa   

 

08048085 <val2>:

 8048085:62                   .byte 0x62

 8048086:63                   .byte 0x63

Disassembly of section .data:

 

08049088 <mybuffer>:

...

麦好的AI乐园博客所有内容是原创,如果转载请注明来源

http://blog.csdn.net/myhaspl/


.bss段定义的数据元素为未初始化的变量,在运行时对其进行初始化。

可分为数据通用内存区域和本地通用内存区域 

本地通用内存区域不能从本地汇编代码之外进行访问。

.text段存放代码

0 0
原创粉丝点击