ASM 中输入参数的反演

逆向工程 纳姆 汇编
2021-06-13 23:48:28

代码是:

.global asm0
asm0:
    push    ebp
    mov ebp,esp
    mov eax,DWORD PTR [ebp+0x8]
    mov ebx,DWORD PTR [ebp+0xc]
    mov eax,ebx
    mov esp,ebp
    pop ebp

条目是:asm0(0x2a,0x4f)

输出为:0x4f2a

为什么输入参数反了?

1个回答

调用约定

您可能指的是调用约定和推送参数的顺序。如果是这样,这里是一个答案地址。您可以在此处阅读有关一般调用约定的更多信息

字节序

您可能也有兴趣从 NASM 文档中阅读有关字节顺序的信息:

3.4.3 字符常量

字符常量由最多 8 个字节长的字符串组成,用于表达式上下文。它被视为一个整数。

超过一个字节的字符常量将按照小端顺序排列:如果你编码

mov eax,'abcd'

那么生成的常量不是 0x61626364,而是 0x64636261,因此如果您当时将该值存储到内存中,它将读取 abcd 而不是 dcba。这也是奔腾的CPUID指令所理解的字符常量的意义。

来源: https : //www.nasm.us/doc/nasmdoc3.html

通过阅读有关字节顺序的主题,可以代表您进行更多研究以更好地理解这一点当您第一次遇到它时会感到困惑,但是有很多像这样的图表可以帮助证明它:

在此处输入图片说明

图片来源https : //agilescientific.com/blog/2017/3/31/little-endian-is-legal

最后,有一个来自 OpenSecurityTraining 的优秀视频,它很好地解释了参数/参数的字节序和顺序以及调用约定。单击此处查看