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

相关推荐
资料,小偿21 小时前
4.1.1基于51单片机汇编语言出租车计价器可切换白天黑夜,可修改价格
汇编·51单片机·proteus
embrace9921 小时前
【C语言学习】数据在内存中存储
java·c语言·开发语言·汇编·c++·学习·算法
T.Ree.7 天前
汇编_mov指令
汇编
CC-NX7 天前
32位汇编:实验12动态链接库
汇编
资料,小偿8 天前
4.101基于8086国旗图案proteus8.9,8086彩灯图案流水灯图案,国期图案仿真,四个开关四种模式。近期本人原创
汇编·proteus
资料,小偿10 天前
4.29.3五种波形发生器8086波形发生器,锯齿波脉冲波正弦波三角波直流信号含调试视频➕18页5000字原创报告软件流程图proteus8.9近期原创的,
汇编·proteus
T.Ree.11 天前
汇编_读写内存
开发语言·汇编·c#
量子炒饭大师11 天前
【一天一个计算机知识】—— 【编程百度】翻译环境与运行环境
c语言·汇编·c++·gitee·机器翻译
资料,小偿13 天前
4.98基于8086倒车测距8086测距ACD0809proteus8.9仿真,汇编语言源程序
汇编·proteus
万象.13 天前
GNU汇编语法和Cortex-A7常用汇编指令
服务器·汇编·gnu