字符串的汇编代码

内核编译和嵌入式产品的设计与开发
回复
edwardlu
帖子: 2
注册时间: 2013-03-02 16:55

字符串的汇编代码

#1

帖子 edwardlu » 2013-03-02 17:01

hi 大家好:
表达式一:
char a = 'a';

表达式二:
char *a = "a";

这两个c表达式再汇编中的区别是什么?
我有objdump -D 得到的汇编代码中发现了表达式一中的内容为:
movb $0x61 0x1f(%esp)
我的理解是是立即数0x61就是字符 a。不知道这样理解对吗?

当使用第二个表达式的时候编译后再dump在汇编文件中没有找到相应的0x61。
当做字符串处理的时候再汇编代码中式怎么处理这个字符串 变量的?

软件环境:ubuntu 12.04
硬件环境:dell optiplex 380
gcc版本:4.6.3

谢谢大家。
头像
cjxgm
帖子: 1952
注册时间: 2010-04-23 20:40
系统: Arch Linux
来自: 浙江·杭州
联系:

Re: 字符串的汇编代码

#2

帖子 cjxgm » 2013-03-02 18:06

好好学习计算机原理和汇编吧 :em06
char *a = "a";
"a" 实际上是 0x61, 0x00,在只读段中,而变量 a 只是一个只读段的地址(指针)而已,看起来应该是 0x8xxxxxxx 之类的一大串
另外,应该写 const char * a = "a",因为修改 a 的内容会段错误(只读段不能修改的嘛)
Clanjor Prods. | Develop for Developers. (C++, Lua) | 作曲编曲 | 实时渲染引擎
回复