C 为什么要向堆栈指针添加地址?

C 为什么要向堆栈指针添加地址?,c,assembly,reverse-engineering,disassembly,msp430,C,Assembly,Reverse Engineering,Disassembly,Msp430,我正在努力理解第一个挑战 我想问一下主函数的第一行 他们为什么要将该地址添加到堆栈指针 这看起来像一个16位ISA1,否则反汇编就没有意义了 0xff9c在16位2的补码中为-100,因此看起来这是为main保留了100字节的堆栈空间。(大多数机器上的堆栈向下增长)这不是地址,只是一个小偏移量。 有关MSP430堆栈布局和用法的详细示例,请参阅 脚注1:MSP430是否可能?它是一个16位的ISA,带有这些寄存器名,我认为它的机器代码使用可变长度的2或4字节指令 绝对不是手臂call和jmp不

我正在努力理解第一个挑战

我想问一下主函数的第一行

他们为什么要将该地址添加到堆栈指针


这看起来像一个16位ISA1,否则反汇编就没有意义了

0xff9c
在16位2的补码中为-100,因此看起来这是为
main
保留了100字节的堆栈空间。(大多数机器上的堆栈向下增长)这不是地址,只是一个小偏移量。

有关MSP430堆栈布局和用法的详细示例,请参阅


脚注1:MSP430是否可能?它是一个16位的ISA,带有这些寄存器名,我认为它的机器代码使用可变长度的2或4字节指令


绝对不是手臂
call
jmp
不是ARM助记符;那将是
bl
b
。此外,ARM使用
op-dst,src1,src2
语法,而此反汇编使用
op-src,dst

不确定您所说的微损坏挑战是什么意思。你能详细说明一下吗?哦,嗯。。。我指的是这个网站。这是什么?可能是MSP430吗?这是一个16位ISA,带有这些寄存器名
0xff9c
在16位2的补码中是
-100
,所以这可能是为main保留了100字节的堆栈空间以供使用。@PeterCordes但为什么是负数?@haruhi堆栈会向下扩展,而不是向上扩展。谢谢。本次挑战的手册中还说它是MSP430。对不起,我应该提一下。。。但是我想问为什么它是-100而不是100?@haruhi:因为它是与
add
指令一起使用的,而不是
sub
。要向下移动SP,必须添加负数。或者你的意思是为什么
0xff9c
代表-100而不是+100?看见如果您的意思是为什么堆栈会变小:。是的,你肯定应该提到你问的是什么。