逆向-beginners之结构体参数

#include <stdio.h>

struct s

{

char a;

int b;

char c;

int d;

};

void f(struct s s)

{

printf("a = %d, b = %d, c = %d, d = %d\n", s.a, s.b, s.c, s.d);

}

int main()

{

struct s tmp;

tmp.a = 1;

tmp.b = 2;

tmp.c = 3;

tmp.d = 4;

f(tmp);

}

#if 0

/*

* intel

*/

0000000000001149 <f>:

1149: f3 0f 1e fa endbr64

114d: 55 push %rbp

114e: 48 89 e5 mov %rsp,%rbp

1151: 48 83 ec 10 sub $0x10,%rsp

1155: 48 89 f8 mov %rdi,%rax // rax=0x1

1158: 48 89 f1 mov %rsi,%rcx // rcx=0x3

115b: 48 89 ca mov %rcx,%rdx // rdx=0x3

115e: 48 89 45 f0 mov %rax,-0x10(%rbp) // (rbp-0x10)=0x1

1162: 48 89 55 f8 mov %rdx,-0x8(%rbp) // (rbp-0x8)=0x3

1166: 8b 75 fc mov -0x4(%rbp),%esi // esi=(rbp-0x4)=0x4

1169: 0f b6 45 f8 movzbl -0x8(%rbp),%eax // eax=(rbp-0x8)=0x3

116d: 0f be c8 movsbl %al,%ecx // ecx=0x3

1170: 8b 55 f4 mov -0xc(%rbp),%edx // edx=(rbp-0xc)=0x2

1173: 0f b6 45 f0 movzbl -0x10(%rbp),%eax // eax=(rbp-0x10)=0x1

1177: 0f be c0 movsbl %al,%eax // eax=0x1

117a: 41 89 f0 mov %esi,%r8d // r8d=0x4

117d: 89 c6 mov %eax,%esi // esi=0x1

117f: 48 8d 3d 82 0e 00 00 lea 0xe82(%rip),%rdi # 2008 <_IO_stdin_used+0x8>

1186: b8 00 00 00 00 mov $0x0,%eax

118b: e8 c0 fe ff ff callq 1050 <printf@plt>

1190: 90 nop

1191: c9 leaveq

1192: c3 retq

0000000000001193 <main>:

1193: f3 0f 1e fa endbr64

1197: 55 push %rbp

1198: 48 89 e5 mov %rsp,%rbp

119b: 48 83 ec 10 sub $0x10,%rsp

119f: c6 45 f0 01 movb $0x1,-0x10(%rbp) // (rbp-0x10)=0x1

11a3: c7 45 f4 02 00 00 00 movl $0x2,-0xc(%rbp) // (rbp-0xc)=0x2

11aa: c6 45 f8 03 movb $0x3,-0x8(%rbp) // (rbp-0x8)=0x3

11ae: c7 45 fc 04 00 00 00 movl $0x4,-0x4(%rbp) // (rbp-0x4)=0x4

11b5: 48 8b 55 f0 mov -0x10(%rbp),%rdx // rdx=(rbp-0x10)

11b9: 48 8b 45 f8 mov -0x8(%rbp),%rax // rax=0x3

11bd: 48 89 d7 mov %rdx,%rdi // rdi=(rbp-0x10)

11c0: 48 89 c6 mov %rax,%rsi // rsi=0x3

11c3: e8 81 ff ff ff callq 1149 <f>

11c8: b8 00 00 00 00 mov $0x0,%eax

11cd: c9 leaveq

11ce: c3 retq

11cf: 90 nop

/*

* arm

*/

000000000040055c <f>:

40055c: a9be7bfd stp x29, x30, [sp, #-32]!

400560: 910003fd mov x29, sp

400564: a90107a0 stp x0, x1, [x29, #16]

400568: 394043a0 ldrb w0, [x29, #16]

40056c: 2a0003e5 mov w5, w0 // w5=1

400570: b94017a1 ldr w1, [x29, #20] // w1=2

400574: 394063a0 ldrb w0, [x29, #24] // w0=3

400578: 2a0003e3 mov w3, w0 // w3=3

40057c: b9401fa2 ldr w2, [x29, #28] // w2=4

400580: 90000000 adrp x0, 400000 <_init-0x3e8>

400584: 911a4000 add x0, x0, #0x690 // x0=""

400588: 2a0203e4 mov w4, w2 // w4=4

40058c: 2a0103e2 mov w2, w1 // w2=2

400590: 2a0503e1 mov w1, w5 // w1=1

400594: 97ffffaf bl 400450 <printf@plt>

400598: d503201f nop

40059c: a8c27bfd ldp x29, x30, [sp], #32

4005a0: d65f03c0 ret

00000000004005a4 <main>:

4005a4: a9be7bfd stp x29, x30, [sp, #-32]!

4005a8: 910003fd mov x29, sp

4005ac: 52800020 mov w0, #0x1 // #1

4005b0: 390043a0 strb w0, [x29, #16]

4005b4: 52800040 mov w0, #0x2 // #2

4005b8: b90017a0 str w0, [x29, #20]

4005bc: 52800060 mov w0, #0x3 // #3

4005c0: 390063a0 strb w0, [x29, #24]

4005c4: 52800080 mov w0, #0x4 // #4

4005c8: b9001fa0 str w0, [x29, #28]

4005cc: a94107a0 ldp x0, x1, [x29, #16]

4005d0: 97ffffe3 bl 40055c <f>

4005d4: 52800000 mov w0, #0x0 // #0

4005d8: a8c27bfd ldp x29, x30, [sp], #32

4005dc: d65f03c0 ret

#endif

相关推荐
txg66621 小时前
编译无关的漏洞检测:基于 Transformer 的 LLVM-IR 与汇编鲁棒建模
汇编·深度学习·安全·transformer
浩浩测试一下2 天前
汇编 16位32位64位通用寄存器(逆向分析)
汇编·windows·stm32·单片机·嵌入式硬件·逆向·二进制
浩浩测试一下2 天前
汇编常用的(JCC 串 判断)指令 通用寄存器 标志寄存器 段寄存器(逆向分析)
汇编·通用寄存器·逆向二进制·标志寄存器·段寄存器·串 jcc 常用指令
浩浩测试一下3 天前
汇编 标志位寄存器 (逆向分析 )
c语言·汇编·逆向·windows编程·标志寄存器
浩浩测试一下3 天前
汇编 数组与串指令(逆向分析)
汇编·逆向·二进制·免杀·串指令·汇编数组
浩浩测试一下3 天前
汇编 内联汇编与混合编程 (逆向分析)
汇编·混合编程·windows编程·内联汇编·二进制逆向·c语言混合汇编
浩浩测试一下3 天前
汇编 结构体与宏
汇编··免杀·结构体·windows编程·逆向二进制
浩浩测试一下4 天前
汇编中的JCC指令 (逆向分析)
汇编·逆向·标志位·jcc指令·跳转指令·标志位寄存器
浩浩测试一下4 天前
汇编中的段与段寄存器(大小)段序 (逆向分析)
汇编·逆向·二进制·字节序·windows编程·内存地址排序
浩浩测试一下5 天前
汇编 call与ret 函数与堆栈 (逆向分析)
汇编·push·函数·pop·call·ret·堆栈逆向