Assembly 如何从分解的二进制文件中读取函数?

Assembly 如何从分解的二进制文件中读取函数?,assembly,x86-64,reverse-engineering,Assembly,X86 64,Reverse Engineering,我试图弄清楚二进制中的一些函数是做什么的,这就是其中之一。我已经连续研究了几个小时,这似乎是一个简单的功能,但我对它还不熟悉,所以我不确定。到目前为止,我得到的是3个参数的类型是short,1个是long-long。最后还有一个打印语句,所以它只是打印出变量吗 70: sym.func.100000d00 (int64_t arg1, int64_t `arg3, int64_t arg4, int64_t arg7); ; var int64_t var_1ch @ rbp-0x1c ; va

我试图弄清楚二进制中的一些函数是做什么的,这就是其中之一。我已经连续研究了几个小时,这似乎是一个简单的功能,但我对它还不熟悉,所以我不确定。到目前为止,我得到的是3个参数的类型是short,1个是long-long。最后还有一个打印语句,所以它只是打印出变量吗

70: sym.func.100000d00 (int64_t arg1, int64_t `arg3, int64_t arg4, int64_t arg7);
; var int64_t var_1ch @ rbp-0x1c
; var int64_t var_18h @ rbp-0x18
; var int64_t var_10h @ rbp-0x10
; var int64_t var_ch @ rbp-0xc
; var int64_t var_5h @ rbp-0x5
; var int64_t var_4h @ rbp-0x4
; arg int64_t arg1 @ rdi
; arg int64_t arg3 @ rdx
; arg int64_t arg4 @ rcx
; arg int64_t arg7 @ xmm0
0x100000d00      push rbp          ; [00] -r-x section size 549 named 0.__TEXT.__text
0x100000d01      mov rbp, rsp
0x100000d04      sub rsp, 0x20
0x100000d08      mov al, sil
0x100000d0b      mov dword [var_4h], edi ; arg1
0x100000d0e      mov byte [var_5h], al
0x100000d11      mov dword [var_ch], edx ; arg3
0x100000d14      mov dword [var_10h], ecx ; arg4
0x100000d17      movsd qword [var_18h], xmm0 ; arg7
0x100000d1c      mov esi, dword [var_4h]
0x100000d1f      mov edx, dword [var_ch]
0x100000d22      mov ecx, dword [var_10h]
0x100000d25      movsd xmm0, qword [var_18h]
0x100000d2a      movsx r8d, byte [var_5h]
0x100000d2f      lea rdi, qword str.d__2d:_2d:_6.3lf__cM ; 0x100000f58 ; const char *format
0x100000d36      mov al, 1
0x100000d38      call section.1.__TEXT.__stubs ; sym.imp.printf ; int printf(const char *format)
0x100000d3d      mov dword [var_1ch], eax
0x100000d40      add rsp, 0x20
0x100000d44      pop rbp
0x100000d45      ret
请注意,
double e
参数可以位于任何位置,因为这不能从调用约定中推断出来。此外,格式字符串位于地址
0x100000f58
中,请自己检查它,因为我只尝试从生成的符号名重建它

int foo(int a, char b, int c, int d, double e)
{
    int printed = printf("%d %2d:%2d:%6.3lf %cM", a, c, d, e, b);
    return printed;
}