逆向-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

相关推荐
myloveasuka7 小时前
寻址方式笔记
汇编·笔记·计算机组成原理
请输入蚊子8 小时前
《操作系统真象还原》 第六章 完善内核
linux·汇编·操作系统·bochs·操作系统真像还原
myloveasuka9 小时前
指令格式举例
汇编·笔记·计算机组成原理
我在人间贩卖青春1 天前
汇编之分支跳转指令
汇编·arm·分支跳转
我在人间贩卖青春1 天前
汇编之加载存储指令
汇编·arm·寄存器加载存储
我在人间贩卖青春1 天前
汇编之状态寄存器访问指令
汇编·arm·状态寄存器
我在人间贩卖青春1 天前
汇编之软中断指令和协处理指令
汇编·arm·软中断·协处理
我在人间贩卖青春1 天前
汇编之数据处理指令
汇编·arm·数据处理指令
白太岁2 天前
操作系统开发:(11) RTOS 与 GPOS 的分界线:MMU
c语言·开发语言·汇编·arm开发·系统架构
枷锁—sha3 天前
【pwn系列】Pwndbg 汇编调试实操教程
网络·汇编·笔记·安全·网络安全