assembly - 寄存器有默认值吗?

标签 assembly

我试图理解一些代码:

jg 0x00000047
dec esp
inc esi
add [ecx],eax

eax 的值是多少?这是程序的前四个句子,我不知道是否有默认值,也不知道前面的句子是否向 eax 添加了一些内容。

我的操作系统是Linux,可执行文件是由gcc4.3从C源代码(gcc file.c exec)编译的

最佳答案

取决于平台、语言和/或调用约定。但是,是的,在此之前的代码通常应该将 EAX 设置为某个值。 EAX 是经常修改的寄存器之一,通常不用于保存内容。

这些说明看起来有点随机。特别是,“dec esp”通常是一个巨大的禁忌,因为堆栈应该始终是双字对齐的。你确定这是真实的代码吗?如果我翻译正确的话,指令字节会翻译为“\x7fELF”,这表明这只是 Linux 程序的头字节,而不是实际的代码字节。

关于assembly - 寄存器有默认值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4142551/

相关文章:

assembly - 将段从 Ring0(内核)更改为 Ring3(用户)会导致段错误

assembly - 显示 ascii 十六进制值数组中的一串字符汇编语言

linux - 为 MIPS 汇编开发创建功能齐全的环境

assembly - x86 汇编器添加

assembly - 来自 AT&T 语法的 Intel Assembly ljmp 语法

assembly - MSP430 中的 sxt 指令到底有什么作用?

linux - ARM汇编 "retne"指令

data-structures - 一个单词有多少位,并且在不同的体系结构中是恒定的吗?

assembly - 如何在 IA32 汇编语言中获取位?

linux - 针对程序集系统调用不支持重定位错误