1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724
| ; CALL XREF from main @ 0x401408(x) ┌ 386: sym.handle_1 (int64_t arg1); │ `- args(rdi) vars(3:sp[0x40..0x6c]) │ 0x004015c6 f30f1efa endbr64 │ 0x004015ca 4157 push r15 │ 0x004015cc 4156 push r14 │ 0x004015ce 4155 push r13 │ 0x004015d0 4154 push r12 │ 0x004015d2 55 push rbp │ 0x004015d3 53 push rbx │ 0x004015d4 4889fb mov rbx, rdi ; arg1 │ 0x004015d7 4883ec48 sub rsp, 0x48 │ 0x004015db 0fb66f06 movzx ebp, byte [rdi + 6] ; arg1 │ 0x004015df 0fb65707 movzx edx, byte [rdi + 7] ; arg1 │ 0x004015e3 64488b0425.. mov rax, qword fs:[0x28] │ 0x004015ec 4889442438 mov qword [canary], rax │ 0x004015f1 31c0 xor eax, eax │ 0x004015f3 0fafea imul ebp, edx │ 0x004015f6 4863ed movsxd rbp, ebp │ 0x004015f9 48c1e502 shl rbp, 2 │ 0x004015fd 4889ef mov rdi, rbp ; size_t size │ 0x00401600 e82bfcffff call sym.imp.malloc ; void *malloc(size_t size) │ 0x00401605 4885c0 test rax, rax │ ┌─< 0x00401608 750e jne 0x401618 │ │ 0x0040160a 488d3df319.. lea rdi, str.ERROR:_Failed_to_allocate_memory_for_the_image_data_ ; 0x403004 ; "ERROR: Failed to allocate memory for the image data!" ; const char *s │ │ 0x00401611 e87afbffff call sym.imp.puts ; int puts(const char *s) │ ┌──< 0x00401616 eb57 jmp 0x40166f │ ││ ; CODE XREF from sym.handle_1 @ 0x401608(x) │ │└─> 0x00401618 89ea mov edx, ebp ; int64_t arg3 │ │ 0x0040161a 4889c6 mov rsi, rax ; void *buf │ │ 0x0040161d 4183c8ff or r8d, 0xffffffff ; -1 │ │ 0x00401621 31ff xor edi, edi ; int fildes │ │ 0x00401623 488d0d0f1a.. lea rcx, str.ERROR:_Failed_to_read_data_ ; 0x403039 ; "ERROR: Failed to read data!" ; int64_t arg4 │ │ 0x0040162a 4989c4 mov r12, rax │ │ 0x0040162d e844ffffff call sym.read_exact │ │ 0x00401632 0fb64307 movzx eax, byte [rbx + 7] │ │ 0x00401636 0fb65306 movzx edx, byte [rbx + 6] │ │ 0x0040163a 0fafd0 imul edx, eax │ │ 0x0040163d 31c0 xor eax, eax │ │ ; CODE XREF from sym.handle_1 @ 0x401653(x) │ │┌─> 0x0040163f 39c2 cmp edx, eax │ ┌───< 0x00401641 7e34 jle 0x401677 │ ││╎ 0x00401643 410fb64c8403 movzx ecx, byte [r12 + rax*4 + 3] │ ││╎ 0x00401649 48ffc0 inc rax │ ││╎ 0x0040164c 8d71e0 lea esi, [rcx - 0x20] │ ││╎ 0x0040164f 4080fe5e cmp sil, 0x5e ; '^' ; 94 │ ││└─< 0x00401653 76ea jbe 0x40163f │ ││ 0x00401655 488b3de439.. mov rdi, qword [obj.stderr] ; obj.stderr__GLIBC_2.2.5 │ ││ ; [0x405040:8]=0 │ ││ 0x0040165c 488d15f219.. lea rdx, str.ERROR:_Invalid_character_0x_x_in_the_image_data__n ; str.ERROR:_Invalid_character_0x_x_in_the_image_data__n │ ││ ; 0x403055 ; "ERROR: Invalid character 0x%x in the image data!\n" │ ││ 0x00401663 be01000000 mov esi, 1 │ ││ 0x00401668 31c0 xor eax, eax │ ││ 0x0040166a e811fcffff call sym.imp.__fprintf_chk │ ││ ; CODE XREF from sym.handle_1 @ 0x401616(x) │ │└──> 0x0040166f 83cfff or edi, 0xffffffff ; -1 │ │ 0x00401672 e8f9fbffff call sym.imp.exit ; void exit(int status) │ │ ; CODE XREF from sym.handle_1 @ 0x401641(x) │ └───> 0x00401677 4531ed xor r13d, r13d │ 0x0040167a 4c8d74241f lea r14, [var_1fh] │ ; CODE XREF from sym.handle_1 @ 0x40171f(x) │ ┌─> 0x0040167f 0fb64307 movzx eax, byte [rbx + 7] │ ╎ 0x00401683 4439e8 cmp eax, r13d │ ┌──< 0x00401686 0f8e98000000 jle 0x401724 │ │╎ 0x0040168c 31ed xor ebp, ebp │ │╎ ; CODE XREF from sym.handle_1 @ 0x401717(x) │ ┌───> 0x0040168e 440fb67b06 movzx r15d, byte [rbx + 6] │ ╎│╎ 0x00401693 4139ef cmp r15d, ebp │ ┌────< 0x00401696 0f8e80000000 jle 0x40171c │ │╎│╎ 0x0040169c 4589fa mov r10d, r15d │ │╎│╎ 0x0040169f b919000000 mov ecx, 0x19 ; 25 │ │╎│╎ 0x004016a4 be19000000 mov esi, 0x19 ; 25 │ │╎│╎ 0x004016a9 4c89f7 mov rdi, r14 │ │╎│╎ 0x004016ac 450fafd5 imul r10d, r13d │ │╎│╎ 0x004016b0 4c8d05d019.. lea r8, str.e_38_2__03d__03d__03dm_ce_0m ; 0x403087 │ │╎│╎ 0x004016b7 418d042a lea eax, [r10 + rbp] │ │╎│╎ 0x004016bb 448954240c mov dword [var_ch], r10d │ │╎│╎ 0x004016c0 4898 cdqe │ │╎│╎ 0x004016c2 52 push rdx │ │╎│╎ 0x004016c3 498d0484 lea rax, [r12 + rax*4] │ │╎│╎ 0x004016c7 0fb65003 movzx edx, byte [rax + 3] │ │╎│╎ 0x004016cb 52 push rdx │ │╎│╎ 0x004016cc 0fb65002 movzx edx, byte [rax + 2] │ │╎│╎ 0x004016d0 52 push rdx │ │╎│╎ 0x004016d1 0fb65001 movzx edx, byte [rax + 1] │ │╎│╎ 0x004016d5 52 push rdx │ │╎│╎ 0x004016d6 440fb608 movzx r9d, byte [rax] │ │╎│╎ 0x004016da ba01000000 mov edx, 1 │ │╎│╎ 0x004016df 31c0 xor eax, eax │ │╎│╎ 0x004016e1 e87afaffff call sym.imp.__snprintf_chk │ │╎│╎ 0x004016e6 89e8 mov eax, ebp │ │╎│╎ 0x004016e8 448b54242c mov r10d, dword [var_ch] │ │╎│╎ 0x004016ed 410f1006 movups xmm0, xmmword [r14] │ │╎│╎ 0x004016f1 99 cdq │ │╎│╎ 0x004016f2 4883c420 add rsp, 0x20 │ │╎│╎ 0x004016f6 ffc5 inc ebp │ │╎│╎ 0x004016f8 41f7ff idiv r15d │ │╎│╎ 0x004016fb 428d0412 lea eax, [rdx + r10] │ │╎│╎ 0x004016ff 31d2 xor edx, edx │ │╎│╎ 0x00401701 f7730c div dword [rbx + 0xc] │ │╎│╎ 0x00401704 486bd218 imul rdx, rdx, 0x18 │ │╎│╎ 0x00401708 48035310 add rdx, qword [rbx + 0x10] │ │╎│╎ 0x0040170c 0f1102 movups xmmword [rdx], xmm0 │ │╎│╎ 0x0040170f 498b4610 mov rax, qword [r14 + 0x10] │ │╎│╎ 0x00401713 48894210 mov qword [rdx + 0x10], rax │ │└───< 0x00401717 e972ffffff jmp 0x40168e │ │ │╎ ; CODE XREF from sym.handle_1 @ 0x401696(x) │ └────> 0x0040171c 41ffc5 inc r13d │ │└─< 0x0040171f e95bffffff jmp 0x40167f │ │ ; CODE XREF from sym.handle_1 @ 0x401686(x) │ └──> 0x00401724 488b442438 mov rax, qword [canary] │ 0x00401729 6448330425.. xor rax, qword fs:[0x28] │ ┌─< 0x00401732 7405 je 0x401739 │ │ 0x00401734 e877faffff call sym.imp.__stack_chk_fail ; void __stack_chk_fail(void) │ │ ; CODE XREF from sym.handle_1 @ 0x401732(x) │ └─> 0x00401739 4883c448 add rsp, 0x48 │ 0x0040173d 5b pop rbx │ 0x0040173e 5d pop rbp │ 0x0040173f 415c pop r12 │ 0x00401741 415d pop r13 │ 0x00401743 415e pop r14 │ 0x00401745 415f pop r15 └ 0x00401747 c3 ret ; CALL XREF from main @ 0x40140f(x) ┌ 517: sym.handle_2 (int64_t arg1, int64_t arg5, int64_t arg_3h); │ `- args(rdi, r8, sp[0x3..0x3]) vars(6:sp[0x40..0x5d]) │ 0x00401748 f30f1efa endbr64 │ 0x0040174c 4157 push r15 │ 0x0040174e 4183c8ff or r8d, 0xffffffff ; -1 ; arg5 │ 0x00401752 ba01000000 mov edx, 1 ; int64_t arg3 │ 0x00401757 488d0d4619.. lea rcx, str.ERROR:_Failed_to_read_base_x_ ; 0x4030a4 ; "ERROR: Failed to read &base_x!" ; int64_t arg4 │ 0x0040175e 4156 push r14 │ 0x00401760 4155 push r13 │ 0x00401762 4154 push r12 │ 0x00401764 4989fc mov r12, rdi ; arg1 │ 0x00401767 31ff xor edi, edi ; int fildes │ 0x00401769 55 push rbp │ 0x0040176a 53 push rbx │ 0x0040176b 4883ec38 sub rsp, 0x38 │ 0x0040176f 64488b0425.. mov rax, qword fs:[0x28] │ 0x00401778 4889442428 mov qword [canary], rax │ 0x0040177d 31c0 xor eax, eax │ 0x0040177f 488d74240d lea rsi, [var_dh] ; void *buf │ 0x00401784 e8edfdffff call sym.read_exact │ 0x00401789 4183c8ff or r8d, 0xffffffff ; -1 │ 0x0040178d 31ff xor edi, edi ; int fildes │ 0x0040178f 488d74240e lea rsi, [var_eh] ; void *buf │ 0x00401794 488d0d2819.. lea rcx, str.ERROR:_Failed_to_read_base_y_ ; 0x4030c3 ; "ERROR: Failed to read &base_y!" ; int64_t arg4 │ 0x0040179b ba01000000 mov edx, 1 ; int64_t arg3 │ 0x004017a0 e8d1fdffff call sym.read_exact │ 0x004017a5 4183c8ff or r8d, 0xffffffff ; -1 │ 0x004017a9 31ff xor edi, edi ; int fildes │ 0x004017ab 488d74240b lea rsi, [var_bh] ; void *buf │ 0x004017b0 488d0d2b19.. lea rcx, str.ERROR:_Failed_to_read_width_ ; 0x4030e2 ; "ERROR: Failed to read &width!" ; int64_t arg4 │ 0x004017b7 ba01000000 mov edx, 1 ; int64_t arg3 │ 0x004017bc e8b5fdffff call sym.read_exact │ 0x004017c1 31ff xor edi, edi ; int fildes │ 0x004017c3 4183c8ff or r8d, 0xffffffff ; -1 │ 0x004017c7 ba01000000 mov edx, 1 ; int64_t arg3 │ 0x004017cc 488d74240c lea rsi, [var_ch] ; void *buf │ 0x004017d1 488d0d2819.. lea rcx, str.ERROR:_Failed_to_read_height_ ; 0x403100 ; "ERROR: Failed to read &height!" ; int64_t arg4 │ 0x004017d8 e899fdffff call sym.read_exact │ 0x004017dd 0fb65c240b movzx ebx, byte [var_bh] │ 0x004017e2 0fb654240c movzx edx, byte [var_ch] │ 0x004017e7 0fafda imul ebx, edx │ 0x004017ea 4863db movsxd rbx, ebx │ 0x004017ed 48c1e302 shl rbx, 2 │ 0x004017f1 4889df mov rdi, rbx ; size_t size │ 0x004017f4 e837faffff call sym.imp.malloc ; void *malloc(size_t size) │ 0x004017f9 4885c0 test rax, rax │ ┌─< 0x004017fc 750e jne 0x40180c │ │ 0x004017fe 488d3dff17.. lea rdi, str.ERROR:_Failed_to_allocate_memory_for_the_image_data_ ; 0x403004 ; "ERROR: Failed to allocate memory for the image data!" ; const char *s │ │ 0x00401805 e886f9ffff call sym.imp.puts ; int puts(const char *s) │ ┌──< 0x0040180a eb58 jmp 0x401864 │ ││ ; CODE XREF from sym.handle_2 @ 0x4017fc(x) │ │└─> 0x0040180c 89da mov edx, ebx ; int64_t arg3 │ │ 0x0040180e 4889c6 mov rsi, rax ; void *buf │ │ 0x00401811 4183c8ff or r8d, 0xffffffff ; -1 │ │ 0x00401815 31ff xor edi, edi ; int fildes │ │ 0x00401817 488d0d1b18.. lea rcx, str.ERROR:_Failed_to_read_data_ ; 0x403039 ; "ERROR: Failed to read data!" ; int64_t arg4 │ │ 0x0040181e 4889c5 mov rbp, rax │ │ 0x00401821 e850fdffff call sym.read_exact │ │ 0x00401826 0fb644240c movzx eax, byte [var_ch] │ │ 0x0040182b 0fb654240b movzx edx, byte [var_bh] │ │ 0x00401830 0fafd0 imul edx, eax │ │ 0x00401833 31c0 xor eax, eax │ │ ; CODE XREF from sym.handle_2 @ 0x401848(x) │ │┌─> 0x00401835 39c2 cmp edx, eax │ ┌───< 0x00401837 7e33 jle 0x40186c │ ││╎ 0x00401839 0fb64c8503 movzx ecx, byte [rbp + rax*4 + 3] │ ││╎ 0x0040183e 48ffc0 inc rax │ ││╎ 0x00401841 8d71e0 lea esi, [rcx - 0x20] │ ││╎ 0x00401844 4080fe5e cmp sil, 0x5e ; '^' ; 94 │ ││└─< 0x00401848 76eb jbe 0x401835 │ ││ 0x0040184a 488b3def37.. mov rdi, qword [obj.stderr] ; obj.stderr__GLIBC_2.2.5 │ ││ ; [0x405040:8]=0 │ ││ 0x00401851 488d15fd17.. lea rdx, str.ERROR:_Invalid_character_0x_x_in_the_image_data__n ; str.ERROR:_Invalid_character_0x_x_in_the_image_data__n │ ││ ; 0x403055 ; "ERROR: Invalid character 0x%x in the image data!\n" │ ││ 0x00401858 be01000000 mov esi, 1 │ ││ 0x0040185d 31c0 xor eax, eax │ ││ 0x0040185f e81cfaffff call sym.imp.__fprintf_chk │ ││ ; CODE XREF from sym.handle_2 @ 0x40180a(x) │ │└──> 0x00401864 83cfff or edi, 0xffffffff ; -1 │ │ 0x00401867 e804faffff call sym.imp.exit ; void exit(int status) │ │ ; CODE XREF from sym.handle_2 @ 0x401837(x) │ └───> 0x0040186c 4531ed xor r13d, r13d │ 0x0040186f 4c8d7c240f lea r15, [var_fh] │ ; CODE XREF from sym.handle_2 @ 0x401924(x) │ ┌─> 0x00401874 0fb644240c movzx eax, byte [var_ch] │ ╎ 0x00401879 4439e8 cmp eax, r13d │ ┌──< 0x0040187c 0f8ea7000000 jle 0x401929 │ │╎ 0x00401882 4531f6 xor r14d, r14d │ │╎ ; CODE XREF from sym.handle_2 @ 0x40191c(x) │ ┌───> 0x00401885 0fb64c240b movzx ecx, byte [var_bh] │ ╎│╎ 0x0040188a 4439f1 cmp ecx, r14d │ ┌────< 0x0040188d 0f8e8e000000 jle 0x401921 │ │╎│╎ 0x00401893 0fb644240d movzx eax, byte [var_dh] │ │╎│╎ 0x00401898 0fb65c240e movzx ebx, byte [var_eh] │ │╎│╎ 0x0040189d 410fafcd imul ecx, r13d │ │╎│╎ 0x004018a1 4c89ff mov rdi, r15 │ │╎│╎ 0x004018a4 410fb6742406 movzx esi, byte [r12 + 6] │ │╎│╎ 0x004018aa 4c8d05d617.. lea r8, str.e_38_2__03d__03d__03dm_ce_0m ; 0x403087 │ │╎│╎ 0x004018b1 4401f0 add eax, r14d │ │╎│╎ 0x004018b4 4401eb add ebx, r13d │ │╎│╎ 0x004018b7 99 cdq │ │╎│╎ 0x004018b8 0fafde imul ebx, esi │ │╎│╎ 0x004018bb 4401f1 add ecx, r14d │ │╎│╎ 0x004018be 41ffc6 inc r14d │ │╎│╎ 0x004018c1 f7fe idiv esi │ │╎│╎ 0x004018c3 4863c9 movsxd rcx, ecx │ │╎│╎ 0x004018c6 be19000000 mov esi, 0x19 ; 25 │ │╎│╎ 0x004018cb 488d448d00 lea rax, [rbp + rcx*4] │ │╎│╎ 0x004018d0 b919000000 mov ecx, 0x19 ; 25 │ │╎│╎ 0x004018d5 01d3 add ebx, edx │ │╎│╎ 0x004018d7 52 push rdx │ │╎│╎ 0x004018d8 0fb65003 movzx edx, byte [rax + 3] │ │╎│╎ 0x004018dc 52 push rdx │ │╎│╎ 0x004018dd 0fb65002 movzx edx, byte [rax + 2] │ │╎│╎ 0x004018e1 52 push rdx │ │╎│╎ 0x004018e2 0fb65001 movzx edx, byte [rax + 1] │ │╎│╎ 0x004018e6 52 push rdx │ │╎│╎ 0x004018e7 440fb608 movzx r9d, byte [rax] │ │╎│╎ 0x004018eb ba01000000 mov edx, 1 │ │╎│╎ 0x004018f0 31c0 xor eax, eax │ │╎│╎ 0x004018f2 e869f8ffff call sym.imp.__snprintf_chk │ │╎│╎ 0x004018f7 89d8 mov eax, ebx │ │╎│╎ 0x004018f9 31d2 xor edx, edx │ │╎│╎ 0x004018fb 410f1007 movups xmm0, xmmword [r15] │ │╎│╎ 0x004018ff 41f774240c div dword [r12 + 0xc] │ │╎│╎ 0x00401904 4883c420 add rsp, 0x20 │ │╎│╎ 0x00401908 486bd218 imul rdx, rdx, 0x18 │ │╎│╎ 0x0040190c 4903542410 add rdx, qword [r12 + 0x10] │ │╎│╎ 0x00401911 0f1102 movups xmmword [rdx], xmm0 │ │╎│╎ 0x00401914 498b4710 mov rax, qword [r15 + 0x10] │ │╎│╎ 0x00401918 48894210 mov qword [rdx + 0x10], rax │ │└───< 0x0040191c e964ffffff jmp 0x401885 │ │ │╎ ; CODE XREF from sym.handle_2 @ 0x40188d(x) │ └────> 0x00401921 41ffc5 inc r13d │ │└─< 0x00401924 e94bffffff jmp 0x401874 │ │ ; CODE XREF from sym.handle_2 @ 0x40187c(x) │ └──> 0x00401929 488b442428 mov rax, qword [canary] │ 0x0040192e 6448330425.. xor rax, qword fs:[0x28] │ ┌─< 0x00401937 7405 je 0x40193e │ │ 0x00401939 e872f8ffff call sym.imp.__stack_chk_fail ; void __stack_chk_fail(void) │ │ ; CODE XREF from sym.handle_2 @ 0x401937(x) │ └─> 0x0040193e 4883c438 add rsp, 0x38 │ 0x00401942 5b pop rbx │ 0x00401943 5d pop rbp │ 0x00401944 415c pop r12 │ 0x00401946 415d pop r13 │ 0x00401948 415e pop r14 │ 0x0040194a 415f pop r15 └ 0x0040194c c3 ret ; CALL XREF from main @ 0x401416(x) ┌ 337: sym.handle_3 (int64_t arg1, int64_t arg5); │ `- args(rdi, r8) vars(4:sp[0x20..0x23]) │ 0x0040194d f30f1efa endbr64 │ 0x00401951 4154 push r12 │ 0x00401953 4183c8ff or r8d, 0xffffffff ; -1 ; arg5 │ 0x00401957 ba01000000 mov edx, 1 ; int64_t arg3 │ 0x0040195c 488d0dbc17.. lea rcx, str.ERROR:_Failed_to_read_sprite_id_ ; 0x40311f ; "ERROR: Failed to read &sprite_id!" ; int64_t arg4 │ 0x00401963 55 push rbp │ 0x00401964 4889fd mov rbp, rdi ; arg1 │ 0x00401967 31ff xor edi, edi ; int fildes │ 0x00401969 53 push rbx │ 0x0040196a 4883ec10 sub rsp, 0x10 │ 0x0040196e 64488b0425.. mov rax, qword fs:[0x28] │ 0x00401977 4889442408 mov qword [canary], rax │ 0x0040197c 31c0 xor eax, eax │ 0x0040197e 488d742405 lea rsi, [var_5h] ; void *buf │ 0x00401983 e8eefbffff call sym.read_exact │ 0x00401988 488d742406 lea rsi, [var_6h] ; void *buf │ 0x0040198d 4183c8ff or r8d, 0xffffffff ; -1 │ 0x00401991 31ff xor edi, edi ; int fildes │ 0x00401993 488d0d4817.. lea rcx, str.ERROR:_Failed_to_read_width_ ; 0x4030e2 ; "ERROR: Failed to read &width!" ; int64_t arg4 │ 0x0040199a ba01000000 mov edx, 1 ; int64_t arg3 │ 0x0040199f e8d2fbffff call sym.read_exact │ 0x004019a4 ba01000000 mov edx, 1 ; int64_t arg3 │ 0x004019a9 31ff xor edi, edi ; int fildes │ 0x004019ab 4183c8ff or r8d, 0xffffffff ; -1 │ 0x004019af 488d742407 lea rsi, [var_7h] ; void *buf │ 0x004019b4 488d0d4517.. lea rcx, str.ERROR:_Failed_to_read_height_ ; 0x403100 ; "ERROR: Failed to read &height!" ; int64_t arg4 │ 0x004019bb e8b6fbffff call sym.read_exact │ 0x004019c0 0fb6442405 movzx eax, byte [var_5h] │ 0x004019c5 8a542406 mov dl, byte [var_6h] │ 0x004019c9 48c1e004 shl rax, 4 │ 0x004019cd 4801e8 add rax, rbp │ 0x004019d0 885019 mov byte [rax + 0x19], dl │ 0x004019d3 488b7820 mov rdi, qword [rax + 0x20] │ 0x004019d7 8a542407 mov dl, byte [var_7h] │ 0x004019db 885018 mov byte [rax + 0x18], dl │ 0x004019de 4885ff test rdi, rdi │ ┌─< 0x004019e1 7405 je 0x4019e8 │ │ 0x004019e3 e888f7ffff call sym.imp.free ; void free(void *ptr) │ │ ; CODE XREF from sym.handle_3 @ 0x4019e1(x) │ └─> 0x004019e8 440fb6642406 movzx r12d, byte [var_6h] │ 0x004019ee 0fb6542407 movzx edx, byte [var_7h] │ 0x004019f3 440fafe2 imul r12d, edx │ 0x004019f7 4963fc movsxd rdi, r12d ; size_t size │ 0x004019fa e831f8ffff call sym.imp.malloc ; void *malloc(size_t size) │ 0x004019ff 4889c3 mov rbx, rax │ 0x00401a02 4885c0 test rax, rax │ ┌─< 0x00401a05 750e jne 0x401a15 │ │ 0x00401a07 488d3df615.. lea rdi, str.ERROR:_Failed_to_allocate_memory_for_the_image_data_ ; 0x403004 ; "ERROR: Failed to allocate memory for the image data!" ; const char *s │ │ 0x00401a0e e87df7ffff call sym.imp.puts ; int puts(const char *s) │ ┌──< 0x00401a13 eb55 jmp 0x401a6a │ ││ ; CODE XREF from sym.handle_3 @ 0x401a05(x) │ │└─> 0x00401a15 4489e2 mov edx, r12d ; int64_t arg3 │ │ 0x00401a18 4889c6 mov rsi, rax ; void *buf │ │ 0x00401a1b 4183c8ff or r8d, 0xffffffff ; -1 │ │ 0x00401a1f 31ff xor edi, edi ; int fildes │ │ 0x00401a21 488d0d1116.. lea rcx, str.ERROR:_Failed_to_read_data_ ; 0x403039 ; "ERROR: Failed to read data!" ; int64_t arg4 │ │ 0x00401a28 e849fbffff call sym.read_exact │ │ 0x00401a2d 0fb6442407 movzx eax, byte [var_7h] │ │ 0x00401a32 0fb6542406 movzx edx, byte [var_6h] │ │ 0x00401a37 0fafd0 imul edx, eax │ │ 0x00401a3a 31c0 xor eax, eax │ │ ; CODE XREF from sym.handle_3 @ 0x401a4e(x) │ │┌─> 0x00401a3c 39c2 cmp edx, eax │ ┌───< 0x00401a3e 7e32 jle 0x401a72 │ ││╎ 0x00401a40 0fb60c03 movzx ecx, byte [rbx + rax] │ ││╎ 0x00401a44 48ffc0 inc rax │ ││╎ 0x00401a47 8d71e0 lea esi, [rcx - 0x20] │ ││╎ 0x00401a4a 4080fe5e cmp sil, 0x5e ; '^' ; 94 │ ││└─< 0x00401a4e 76ec jbe 0x401a3c │ ││ 0x00401a50 488b3de935.. mov rdi, qword [obj.stderr] ; obj.stderr__GLIBC_2.2.5 │ ││ ; [0x405040:8]=0 │ ││ 0x00401a57 488d15f715.. lea rdx, str.ERROR:_Invalid_character_0x_x_in_the_image_data__n ; str.ERROR:_Invalid_character_0x_x_in_the_image_data__n │ ││ ; 0x403055 ; "ERROR: Invalid character 0x%x in the image data!\n" │ ││ 0x00401a5e be01000000 mov esi, 1 │ ││ 0x00401a63 31c0 xor eax, eax │ ││ 0x00401a65 e816f8ffff call sym.imp.__fprintf_chk │ ││ ; CODE XREF from sym.handle_3 @ 0x401a13(x) │ │└──> 0x00401a6a 83cfff or edi, 0xffffffff ; -1 │ │ 0x00401a6d e8fef7ffff call sym.imp.exit ; void exit(int status) │ │ ; CODE XREF from sym.handle_3 @ 0x401a3e(x) │ └───> 0x00401a72 0fb6442405 movzx eax, byte [var_5h] │ 0x00401a77 48c1e004 shl rax, 4 │ 0x00401a7b 48895c2820 mov qword [rax + rbp + 0x20], rbx │ 0x00401a80 488b442408 mov rax, qword [canary] │ 0x00401a85 6448330425.. xor rax, qword fs:[0x28] │ ┌─< 0x00401a8e 7405 je 0x401a95 │ │ 0x00401a90 e81bf7ffff call sym.imp.__stack_chk_fail ; void __stack_chk_fail(void) │ │ ; CODE XREF from sym.handle_3 @ 0x401a8e(x) │ └─> 0x00401a95 4883c410 add rsp, 0x10 │ 0x00401a99 5b pop rbx │ 0x00401a9a 5d pop rbp │ 0x00401a9b 415c pop r12 └ 0x00401a9d c3 ret ; CALL XREF from main @ 0x40141d(x) ┌ 603: sym.handle_4 (int64_t arg1, int64_t arg5); │ `- args(rdi, r8) vars(16:sp[0x1056..0x1078]) │ 0x00401c36 f30f1efa endbr64 │ 0x00401c3a 4157 push r15 │ 0x00401c3c 4156 push r14 │ 0x00401c3e 4155 push r13 │ 0x00401c40 4154 push r12 │ 0x00401c42 55 push rbp │ 0x00401c43 53 push rbx │ 0x00401c44 4c8d9c2400.. lea r11, [rsp - 0x40000] │ ; CODE XREF from sym.handle_4 @ 0x401c5a(x) │ ┌─> 0x00401c4c 4881ec0010.. sub rsp, 0x1000 │ ╎ 0x00401c53 830c2400 or dword [rsp], 0 │ ╎ 0x00401c57 4c39dc cmp rsp, r11 │ └─< 0x00401c5a 75f0 jne 0x401c4c │ 0x00401c5c 4883ec48 sub rsp, 0x48 │ 0x00401c60 488d0d5615.. lea rcx, str.ERROR:_Failed_to_read_sprite_render_record_ ; 0x4031bd ; "ERROR: Failed to read &sprite_render_record!" ; int64_t arg4 │ 0x00401c67 ba09000000 mov edx, 9 ; int64_t arg3 │ 0x00401c6c 4183c8ff or r8d, 0xffffffff ; -1 ; arg5 │ 0x00401c70 64488b0425.. mov rax, qword fs:[0x28] │ 0x00401c79 4889842438.. mov qword [rsp + 0x40038], rax ; [0x40038:8]=-1 │ 0x00401c81 31c0 xor eax, eax │ 0x00401c83 4889fb mov rbx, rdi ; arg1 │ 0x00401c86 488d742416 lea rsi, [var_16h] ; void *buf │ 0x00401c8b 31ff xor edi, edi ; int fildes │ 0x00401c8d e8e4f8ffff call sym.read_exact │ 0x00401c92 488d7c241f lea rdi, [var_1fh] │ 0x00401c97 b900000100 mov ecx, 0x10000 │ 0x00401c9c 31c0 xor eax, eax │ 0x00401c9e 0fb6542416 movzx edx, byte [var_16h] │ 0x00401ca3 448a542417 mov r10b, byte [var_17h] │ 0x00401ca8 488d74241f lea rsi, [var_1fh] │ 0x00401cad f3ab rep stosd dword [rdi], eax │ 0x00401caf 448a5c2418 mov r11b, byte [var_18h] │ 0x00401cb4 408a6c2419 mov bpl, byte [var_19h] │ 0x00401cb9 48c1e204 shl rdx, 4 │ 0x00401cbd 4801da add rdx, rbx │ 0x00401cc0 440fb66218 movzx r12d, byte [rdx + 0x18] │ ; CODE XREF from sym.handle_4 @ 0x401d20(x) │ ┌─> 0x00401cc5 4139cc cmp r12d, ecx │ ┌──< 0x00401cc8 7e58 jle 0x401d22 │ │╎ 0x00401cca 440fb64219 movzx r8d, byte [rdx + 0x19] │ │╎ 0x00401ccf 31ff xor edi, edi │ │╎ 0x00401cd1 4489c0 mov eax, r8d │ │╎ 0x00401cd4 0fafc1 imul eax, ecx │ │╎ ; CODE XREF from sym.handle_4 @ 0x401d1c(x) │ ┌───> 0x00401cd7 4139f8 cmp r8d, edi │ ┌────< 0x00401cda 7e42 jle 0x401d1e │ │╎│╎ 0x00401cdc 4c8b4a20 mov r9, qword [rdx + 0x20] │ │╎│╎ 0x00401ce0 44881486 mov byte [rsi + rax*4], r10b │ │╎│╎ 0x00401ce4 44885c8601 mov byte [rsi + rax*4 + 1], r11b │ │╎│╎ 0x00401ce9 40886c8602 mov byte [rsi + rax*4 + 2], bpl │ │╎│╎ 0x00401cee 4d85c9 test r9, r9 │ ┌─────< 0x00401cf1 751b jne 0x401d0e │ ││╎│╎ 0x00401cf3 488b354633.. mov rsi, qword [obj.stderr] ; obj.stderr__GLIBC_2.2.5 │ ││╎│╎ ; [0x405040:8]=0 ; FILE *stream │ ││╎│╎ 0x00401cfa 488d3de914.. lea rdi, str.ERROR:_attempted_to_render_uninitialized_sprite__n ; 0x4031ea ; "ERROR: attempted to render uninitialized sprite!\n" ; const char *s │ ││╎│╎ 0x00401d01 e8daf4ffff call sym.imp.fputs ; int fputs(const char *s, FILE *stream) │ ││╎│╎ 0x00401d06 83cfff or edi, 0xffffffff ; -1 │ ││╎│╎ 0x00401d09 e862f5ffff call sym.imp.exit ; void exit(int status) │ ││╎│╎ ; CODE XREF from sym.handle_4 @ 0x401cf1(x) │ └─────> 0x00401d0e 458a0c01 mov r9b, byte [r9 + rax] │ │╎│╎ 0x00401d12 ffc7 inc edi │ │╎│╎ 0x00401d14 44884c8603 mov byte [rsi + rax*4 + 3], r9b │ │╎│╎ 0x00401d19 48ffc0 inc rax │ │└───< 0x00401d1c ebb9 jmp 0x401cd7 │ │ │╎ ; CODE XREF from sym.handle_4 @ 0x401cda(x) │ └────> 0x00401d1e ffc1 inc ecx │ │└─< 0x00401d20 eba3 jmp 0x401cc5 │ │ ; CODE XREF from sym.handle_4 @ 0x401cc8(x) │ └──> 0x00401d22 4531ff xor r15d, r15d │ 0x00401d25 488dbc241f.. lea rdi, [rsp + 0x4001f] │ ; CODE XREF from sym.handle_4 @ 0x401e62(x) │ ┌─> 0x00401d2d 0fb644241d movzx eax, byte [var_1dh] │ ╎ 0x00401d32 4439f8 cmp eax, r15d │ ┌──< 0x00401d35 0f8e2c010000 jle 0x401e67 │ │╎ 0x00401d3b 4531d2 xor r10d, r10d │ │╎ ; CODE XREF from sym.handle_4 @ 0x401e5a(x) │ ┌───> 0x00401d3e 0fb644241c movzx eax, byte [var_1ch] │ ╎│╎ 0x00401d43 4439d0 cmp eax, r10d │ ┌────< 0x00401d46 0f8e13010000 jle 0x401e5f │ │╎│╎ 0x00401d4c 0fb6542416 movzx edx, byte [var_16h] │ │╎│╎ 0x00401d51 4531db xor r11d, r11d │ │╎│╎ 0x00401d54 48c1e204 shl rdx, 4 │ │╎│╎ 0x00401d58 4801da add rdx, rbx │ │╎│╎ 0x00401d5b 8a4219 mov al, byte [rdx + 0x19] │ │╎│╎ 0x00401d5e 410fafc2 imul eax, r10d │ │╎│╎ 0x00401d62 0244241a add al, byte [var_1ah] │ │╎│╎ 0x00401d66 440fb6e0 movzx r12d, al │ │╎│╎ 0x00401d6a 8a4218 mov al, byte [rdx + 0x18] │ │╎│╎ 0x00401d6d 410fafc7 imul eax, r15d │ │╎│╎ 0x00401d71 0244241b add al, byte [var_1bh] │ │╎│╎ 0x00401d75 0fb6e8 movzx ebp, al │ │╎│╎ ; CODE XREF from sym.handle_4 @ 0x401e52(x) │ ┌─────> 0x00401d78 0fb6442416 movzx eax, byte [var_16h] │ ╎│╎│╎ 0x00401d7d 48c1e004 shl rax, 4 │ ╎│╎│╎ 0x00401d81 0fb6441818 movzx eax, byte [rax + rbx + 0x18] │ ╎│╎│╎ 0x00401d86 4439d8 cmp eax, r11d │ ┌──────< 0x00401d89 0f8ec8000000 jle 0x401e57 │ │╎│╎│╎ 0x00401d8f 4531ed xor r13d, r13d │ │╎│╎│╎ ; CODE XREF from sym.handle_4 @ 0x401e48(x) │ ┌───────> 0x00401d92 0fb6442416 movzx eax, byte [var_16h] │ ╎│╎│╎│╎ 0x00401d97 48c1e004 shl rax, 4 │ ╎│╎│╎│╎ 0x00401d9b 0fb6441819 movzx eax, byte [rax + rbx + 0x19] │ ╎│╎│╎│╎ 0x00401da0 4439e8 cmp eax, r13d │ ────────< 0x00401da3 0f8ea4000000 jle 0x401e4d │ ╎│╎│╎│╎ 0x00401da9 410fafc3 imul eax, r11d │ ╎│╎│╎│╎ 0x00401dad 4401e8 add eax, r13d │ ╎│╎│╎│╎ 0x00401db0 4898 cdqe │ ╎│╎│╎│╎ 0x00401db2 0fb6548422 movzx edx, byte [rsp + rax*4 + 0x22] │ ╎│╎│╎│╎ 0x00401db7 3a54241e cmp dl, byte [var_1eh] │ ────────< 0x00401dbb 0f8484000000 je 0x401e45 │ ╎│╎│╎│╎ 0x00401dc1 44895c240c mov dword [var_ch], r11d │ ╎│╎│╎│╎ 0x00401dc6 be19000000 mov esi, 0x19 ; 25 │ ╎│╎│╎│╎ 0x00401dcb 440fb67306 movzx r14d, byte [rbx + 6] │ ╎│╎│╎│╎ 0x00401dd0 4c8d05b012.. lea r8, str.e_38_2__03d__03d__03dm_ce_0m ; 0x403087 │ ╎│╎│╎│╎ 0x00401dd7 4489542408 mov dword [var_8h], r10d │ ╎│╎│╎│╎ 0x00401ddc 51 push rcx │ ╎│╎│╎│╎ 0x00401ddd b919000000 mov ecx, 0x19 ; 25 │ ╎│╎│╎│╎ 0x00401de2 52 push rdx │ ╎│╎│╎│╎ 0x00401de3 0fb6548431 movzx edx, byte [rsp + rax*4 + 0x31] │ ╎│╎│╎│╎ 0x00401de8 52 push rdx │ ╎│╎│╎│╎ 0x00401de9 0fb6548438 movzx edx, byte [rsp + rax*4 + 0x38] │ ╎│╎│╎│╎ 0x00401dee 52 push rdx │ ╎│╎│╎│╎ 0x00401def 440fb64c843f movzx r9d, byte [rsp + rax*4 + 0x3f] │ ╎│╎│╎│╎ 0x00401df5 ba01000000 mov edx, 1 │ ╎│╎│╎│╎ 0x00401dfa 31c0 xor eax, eax │ ╎│╎│╎│╎ 0x00401dfc 48897c2420 mov qword [var_20h], rdi │ ╎│╎│╎│╎ 0x00401e01 e85af3ffff call sym.imp.__snprintf_chk │ ╎│╎│╎│╎ 0x00401e06 438d442500 lea eax, [r13 + r12] │ ╎│╎│╎│╎ 0x00401e0b 488b7c2420 mov rdi, qword [var_20h] │ ╎│╎│╎│╎ 0x00401e10 448b5c242c mov r11d, dword [var_ch] │ ╎│╎│╎│╎ 0x00401e15 99 cdq │ ╎│╎│╎│╎ 0x00401e16 448b542428 mov r10d, dword [var_8h] │ ╎│╎│╎│╎ 0x00401e1b 4883c420 add rsp, 0x20 │ ╎│╎│╎│╎ 0x00401e1f 41f7fe idiv r14d │ ╎│╎│╎│╎ 0x00401e22 0f1007 movups xmm0, xmmword [rdi] │ ╎│╎│╎│╎ 0x00401e25 440faff5 imul r14d, ebp │ ╎│╎│╎│╎ 0x00401e29 428d0432 lea eax, [rdx + r14] │ ╎│╎│╎│╎ 0x00401e2d 31d2 xor edx, edx │ ╎│╎│╎│╎ 0x00401e2f f7730c div dword [rbx + 0xc] │ ╎│╎│╎│╎ 0x00401e32 486bd218 imul rdx, rdx, 0x18 │ ╎│╎│╎│╎ 0x00401e36 48035310 add rdx, qword [rbx + 0x10] │ ╎│╎│╎│╎ 0x00401e3a 0f1102 movups xmmword [rdx], xmm0 │ ╎│╎│╎│╎ 0x00401e3d 488b4710 mov rax, qword [rdi + 0x10] │ ╎│╎│╎│╎ 0x00401e41 48894210 mov qword [rdx + 0x10], rax │ ╎│╎│╎│╎ ; CODE XREF from sym.handle_4 @ 0x401dbb(x) │ ────────> 0x00401e45 41ffc5 inc r13d │ └───────< 0x00401e48 e945ffffff jmp 0x401d92 │ │╎│╎│╎ ; CODE XREF from sym.handle_4 @ 0x401da3(x) │ ────────> 0x00401e4d 41ffc3 inc r11d │ │╎│╎│╎ 0x00401e50 ffc5 inc ebp │ │└─────< 0x00401e52 e921ffffff jmp 0x401d78 │ │ │╎│╎ ; CODE XREF from sym.handle_4 @ 0x401d89(x) │ └──────> 0x00401e57 41ffc2 inc r10d │ │└───< 0x00401e5a e9dffeffff jmp 0x401d3e │ │ │╎ ; CODE XREF from sym.handle_4 @ 0x401d46(x) │ └────> 0x00401e5f 41ffc7 inc r15d │ │└─< 0x00401e62 e9c6feffff jmp 0x401d2d │ │ ; CODE XREF from sym.handle_4 @ 0x401d35(x) │ └──> 0x00401e67 488b842438.. mov rax, qword [rsp + 0x40038] │ 0x00401e6f 6448330425.. xor rax, qword fs:[0x28] │ ┌─< 0x00401e78 7405 je 0x401e7f │ │ 0x00401e7a e831f3ffff call sym.imp.__stack_chk_fail ; void __stack_chk_fail(void) │ │ ; CODE XREF from sym.handle_4 @ 0x401e78(x) │ └─> 0x00401e7f 4881c44800.. add rsp, 0x40048 │ 0x00401e86 5b pop rbx │ 0x00401e87 5d pop rbp │ 0x00401e88 415c pop r12 │ 0x00401e8a 415d pop r13 │ 0x00401e8c 415e pop r14 │ 0x00401e8e 415f pop r15 └ 0x00401e90 c3 ret ; CALL XREF from main @ 0x401424(x) ┌ 408: sym.handle_5 (int64_t arg1, int64_t arg5); │ `- args(rdi, r8) vars(5:sp[0x30..0x133]) │ 0x00401a9e f30f1efa endbr64 │ 0x00401aa2 4155 push r13 │ 0x00401aa4 b903010000 mov ecx, 0x103 ; 259 │ 0x00401aa9 4183c8ff or r8d, 0xffffffff ; -1 ; arg5 │ 0x00401aad ba02010000 mov edx, 0x102 ; 258 ; int64_t arg3 │ 0x00401ab2 4154 push r12 │ 0x00401ab4 4989fc mov r12, rdi ; arg1 │ 0x00401ab7 55 push rbp │ 0x00401ab8 53 push rbx │ 0x00401ab9 4881ec1801.. sub rsp, 0x118 │ 0x00401ac0 64488b0425.. mov rax, qword fs:[0x28] │ 0x00401ac9 4889842408.. mov qword [canary], rax │ 0x00401ad1 31c0 xor eax, eax │ 0x00401ad3 488d7c2405 lea rdi, [var_5h] │ 0x00401ad8 488d742405 lea rsi, [var_5h] ; void *buf │ 0x00401add f3aa rep stosb byte [rdi], al │ 0x00401adf 488d0d5b16.. lea rcx, str.ERROR:_Failed_to_read_sprite_load_record_ ; 0x403141 ; "ERROR: Failed to read &sprite_load_record!" ; int64_t arg4 │ 0x00401ae6 31ff xor edi, edi ; int fildes │ 0x00401ae8 e889faffff call sym.read_exact │ 0x00401aed 668b542406 mov dx, word [var_6h] │ 0x00401af2 0fb6442405 movzx eax, byte [var_5h] │ 0x00401af7 31f6 xor esi, esi ; int oflag │ 0x00401af9 488d7c2408 lea rdi, [path] ; const char *path │ 0x00401afe 86f2 xchg dl, dh │ 0x00401b00 48c1e004 shl rax, 4 │ 0x00401b04 664189540418 mov word [r12 + rax + 0x18], dx │ 0x00401b0a 31c0 xor eax, eax │ 0x00401b0c e84ff7ffff call sym.imp.open ; int open(const char *path, int oflag) │ 0x00401b11 488b352835.. mov rsi, qword [obj.stderr] ; obj.stderr__GLIBC_2.2.5 │ ; [0x405040:8]=0 │ 0x00401b18 488d3d4d16.. lea rdi, str.ERROR:_failed_to_open_sprite_file_n ; 0x40316c ; "ERROR: failed to open sprite file\n" │ 0x00401b1f 85c0 test eax, eax │ ┌─< 0x00401b21 0f88ca000000 js 0x401bf1 │ │ 0x00401b27 89c5 mov ebp, eax │ │ 0x00401b29 0fb6442405 movzx eax, byte [var_5h] │ │ 0x00401b2e 48c1e004 shl rax, 4 │ │ 0x00401b32 4a8b7c2020 mov rdi, qword [rax + r12 + 0x20] │ │ 0x00401b37 4885ff test rdi, rdi │ ┌──< 0x00401b3a 7405 je 0x401b41 │ ││ 0x00401b3c e82ff6ffff call sym.imp.free ; void free(void *ptr) │ ││ ; CODE XREF from sym.handle_5 @ 0x401b3a(x) │ └──> 0x00401b41 440fb66c2406 movzx r13d, byte [var_6h] │ │ 0x00401b47 0fb6542407 movzx edx, byte [var_7h] │ │ 0x00401b4c 440fafea imul r13d, edx │ │ 0x00401b50 4963fd movsxd rdi, r13d ; size_t size │ │ 0x00401b53 e8d8f6ffff call sym.imp.malloc ; void *malloc(size_t size) │ │ 0x00401b58 4889c3 mov rbx, rax │ │ 0x00401b5b 4885c0 test rax, rax │ ┌──< 0x00401b5e 7514 jne 0x401b74 │ ││ 0x00401b60 488d3d9d14.. lea rdi, str.ERROR:_Failed_to_allocate_memory_for_the_image_data_ ; 0x403004 ; "ERROR: Failed to allocate memory for the image data!" ; const char *s │ ││ 0x00401b67 e824f6ffff call sym.imp.puts ; int puts(const char *s) │ ││ ; CODE XREFS from sym.handle_5 @ 0x401bc9(x), 0x401bf6(x) │ ┌┌───> 0x00401b6c 83cfff or edi, 0xffffffff ; -1 │ ╎╎││ 0x00401b6f e8fcf6ffff call sym.imp.exit ; void exit(int status) │ ╎╎││ ; CODE XREF from sym.handle_5 @ 0x401b5e(x) │ ╎╎└──> 0x00401b74 4489ea mov edx, r13d ; int64_t arg3 │ ╎╎ │ 0x00401b77 4889c6 mov rsi, rax ; void *buf │ ╎╎ │ 0x00401b7a 4183c8ff or r8d, 0xffffffff ; -1 │ ╎╎ │ 0x00401b7e 89ef mov edi, ebp ; int fildes │ ╎╎ │ 0x00401b80 488d0db214.. lea rcx, str.ERROR:_Failed_to_read_data_ ; 0x403039 ; "ERROR: Failed to read data!" ; int64_t arg4 │ ╎╎ │ 0x00401b87 e8eaf9ffff call sym.read_exact │ ╎╎ │ 0x00401b8c 0fb6442407 movzx eax, byte [var_7h] │ ╎╎ │ 0x00401b91 0fb6542406 movzx edx, byte [var_6h] │ ╎╎ │ 0x00401b96 0fafd0 imul edx, eax │ ╎╎ │ 0x00401b99 31c0 xor eax, eax │ ╎╎ │ ; CODE XREF from sym.handle_5 @ 0x401bad(x) │ ╎╎┌──> 0x00401b9b 39c2 cmp edx, eax │ ┌─────< 0x00401b9d 7e2c jle 0x401bcb │ │╎╎╎│ 0x00401b9f 0fb60c03 movzx ecx, byte [rbx + rax] │ │╎╎╎│ 0x00401ba3 48ffc0 inc rax │ │╎╎╎│ 0x00401ba6 8d71e0 lea esi, [rcx - 0x20] │ │╎╎╎│ 0x00401ba9 4080fe5e cmp sil, 0x5e ; '^' ; 94 │ │╎╎└──< 0x00401bad 76ec jbe 0x401b9b │ │╎╎ │ 0x00401baf 488b3d8a34.. mov rdi, qword [obj.stderr] ; obj.stderr__GLIBC_2.2.5 │ │╎╎ │ ; [0x405040:8]=0 │ │╎╎ │ 0x00401bb6 488d159814.. lea rdx, str.ERROR:_Invalid_character_0x_x_in_the_image_data__n ; str.ERROR:_Invalid_character_0x_x_in_the_image_data__n │ │╎╎ │ ; 0x403055 ; "ERROR: Invalid character 0x%x in the image data!\n" │ │╎╎ │ 0x00401bbd be01000000 mov esi, 1 │ │╎╎ │ 0x00401bc2 31c0 xor eax, eax │ │╎╎ │ 0x00401bc4 e8b7f6ffff call sym.imp.__fprintf_chk │ │└────< 0x00401bc9 eba1 jmp 0x401b6c │ │ ╎ │ ; CODE XREF from sym.handle_5 @ 0x401b9d(x) │ └─────> 0x00401bcb ba0c000000 mov edx, 0xc ; 12 ; size_t n │ ╎ │ 0x00401bd0 488d35b815.. lea rsi, str.pwn.college ; 0x40318f ; "pwn.college{" ; const char *s2 │ ╎ │ 0x00401bd7 4889df mov rdi, rbx ; const char *s1 │ ╎ │ 0x00401bda e8a1f5ffff call sym.imp.strncmp ; int strncmp(const char *s1, const char *s2, size_t n) │ ╎ │ 0x00401bdf 85c0 test eax, eax │ ╎┌──< 0x00401be1 7518 jne 0x401bfb │ ╎││ 0x00401be3 488b355634.. mov rsi, qword [obj.stderr] ; obj.stderr__GLIBC_2.2.5 │ ╎││ ; [0x405040:8]=0 │ ╎││ 0x00401bea 488d3dab15.. lea rdi, str.ERROR:_shenanigans_detected_____ ; 0x40319c ; "ERROR: shenanigans detected!!!!!" │ ╎││ ; CODE XREF from sym.handle_5 @ 0x401b21(x) │ ╎│└─> 0x00401bf1 e8eaf5ffff call sym.imp.fputs ; int fputs(const char *s, FILE *stream) │ └───< 0x00401bf6 e971ffffff jmp 0x401b6c │ │ ; CODE XREF from sym.handle_5 @ 0x401be1(x) │ └──> 0x00401bfb 0fb6442405 movzx eax, byte [var_5h] │ 0x00401c00 89ef mov edi, ebp ; int fildes │ 0x00401c02 48c1e004 shl rax, 4 │ 0x00401c06 4a895c2020 mov qword [rax + r12 + 0x20], rbx │ 0x00401c0b e8e0f5ffff call sym.imp.close ; int close(int fildes) │ 0x00401c10 488b842408.. mov rax, qword [canary] │ 0x00401c18 6448330425.. xor rax, qword fs:[0x28] │ ┌─< 0x00401c21 7405 je 0x401c28 │ │ 0x00401c23 e888f5ffff call sym.imp.__stack_chk_fail ; void __stack_chk_fail(void) │ │ ; CODE XREF from sym.handle_5 @ 0x401c21(x) │ └─> 0x00401c28 4881c41801.. add rsp, 0x118 │ 0x00401c2f 5b pop rbx │ 0x00401c30 5d pop rbp │ 0x00401c31 415c pop r12 │ 0x00401c33 415d pop r13 └ 0x00401c35 c3 ret ; CALL XREF from main @ 0x40142b(x) ┌ 121: sym.handle_6 (int64_t arg1, int64_t arg5); │ `- args(rdi, r8) vars(2:sp[0x10..0x11]) │ 0x00401f6b f30f1efa endbr64 │ 0x00401f6f 55 push rbp │ 0x00401f70 4183c8ff or r8d, 0xffffffff ; -1 ; arg5 │ 0x00401f74 4889fd mov rbp, rdi ; arg1 │ 0x00401f77 ba01000000 mov edx, 1 ; int64_t arg3 │ 0x00401f7c 31ff xor edi, edi ; int fildes │ 0x00401f7e 488d0dd512.. lea rcx, str.ERROR:_Failed_to_read_clear_ ; 0x40325a ; "ERROR: Failed to read &clear!" ; int64_t arg4 │ 0x00401f85 4883ec10 sub rsp, 0x10 │ 0x00401f89 64488b0425.. mov rax, qword fs:[0x28] │ 0x00401f92 4889442408 mov qword [canary], rax │ 0x00401f97 31c0 xor eax, eax │ 0x00401f99 488d742407 lea rsi, [var_7h] ; void *buf │ 0x00401f9e e8d3f5ffff call sym.read_exact │ 0x00401fa3 807c240700 cmp byte [var_7h], 0 │ ┌─< 0x00401fa8 7413 je 0x401fbd │ │ 0x00401faa 488d35c712.. lea rsi, str.e_He_2J ; 0x403278 │ │ 0x00401fb1 bf01000000 mov edi, 1 │ │ 0x00401fb6 31c0 xor eax, eax │ │ 0x00401fb8 e883f2ffff call sym.imp.__printf_chk │ │ ; CODE XREF from sym.handle_6 @ 0x401fa8(x) │ └─> 0x00401fbd 31f6 xor esi, esi │ 0x00401fbf 31c0 xor eax, eax │ 0x00401fc1 4889ef mov rdi, rbp ; int64_t arg1 │ 0x00401fc4 e841ffffff call sym.display │ 0x00401fc9 488b442408 mov rax, qword [canary] │ 0x00401fce 6448330425.. xor rax, qword fs:[0x28] │ ┌─< 0x00401fd7 7405 je 0x401fde │ │ 0x00401fd9 e8d2f1ffff call sym.imp.__stack_chk_fail ; void __stack_chk_fail(void) │ │ ; CODE XREF from sym.handle_6 @ 0x401fd7(x) │ └─> 0x00401fde 4883c410 add rsp, 0x10 │ 0x00401fe2 5d pop rbp └ 0x00401fe3 c3 ret ; CALL XREF from main @ 0x401432(x) ┌ 121: sym.handle_7 (int64_t arg5); │ `- args(r8) vars(4:sp[0x10..0x24]) │ 0x00401e91 f30f1efa endbr64 │ 0x00401e95 4883ec28 sub rsp, 0x28 │ 0x00401e99 4183c8ff or r8d, 0xffffffff ; -1 ; arg5 │ 0x00401e9d 31ff xor edi, edi ; int fildes │ 0x00401e9f ba04000000 mov edx, 4 ; size_t nbyte │ 0x00401ea4 64488b0425.. mov rax, qword fs:[0x28] │ 0x00401ead 4889442418 mov qword [canary], rax │ 0x00401eb2 31c0 xor eax, eax │ 0x00401eb4 488d742404 lea rsi, [var_4h] ; void *buf │ 0x00401eb9 488d0d5c13.. lea rcx, str.ERROR:_Failed_to_read_milliseconds_ ; 0x40321c ; "ERROR: Failed to read &milliseconds!" ; int64_t arg4 │ 0x00401ec0 e8b1f6ffff call sym.read_exact │ 0x00401ec5 8b442404 mov eax, dword [var_4h] │ 0x00401ec9 b9e8030000 mov ecx, 0x3e8 ; 1000 │ 0x00401ece 31d2 xor edx, edx │ 0x00401ed0 31f6 xor esi, esi ; struct timespec *rem │ 0x00401ed2 488d7c2408 lea rdi, [req] ; const struct timespec *req │ 0x00401ed7 f7f1 div ecx │ 0x00401ed9 89c0 mov eax, eax │ 0x00401edb 4889442408 mov qword [req], rax │ 0x00401ee0 69c240420f00 imul eax, edx, 0xf4240 │ 0x00401ee6 4889442410 mov qword [var_10h], rax │ 0x00401eeb e8e0f2ffff call sym.imp.nanosleep ; int nanosleep(const struct timespec *req, struct timespec *rem) │ 0x00401ef0 488b442418 mov rax, qword [canary] │ 0x00401ef5 6448330425.. xor rax, qword fs:[0x28] │ ┌─< 0x00401efe 7405 je 0x401f05 │ │ 0x00401f00 e8abf2ffff call sym.imp.__stack_chk_fail ; void __stack_chk_fail(void) │ │ ; CODE XREF from sym.handle_7 @ 0x401efe(x) │ └─> 0x00401f05 4883c428 add rsp, 0x28 └ 0x00401f09 c3 ret
|