Advertisement
_takumi

edited

Dec 23rd, 2022
1,461
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     .intel_syntax noprefix
  2.     .text
  3.     .section    .rodata
  4. .LC0:
  5.     .string "%[^\n]s"
  6.     .text
  7.     .globl  main
  8.     .type   main, @function
  9. main:
  10.     push    rbp
  11.     mov rbp, rsp
  12.     sub rsp, 96
  13.     mov DWORD PTR -84[rbp], 0 # n
  14.     mov DWORD PTR -92[rbp], 0 # cnt
  15.     # map ->
  16.     mov DWORD PTR -64[rbp], 73
  17.     mov BYTE PTR -60[rbp], 0
  18.     mov DWORD PTR -59[rbp], 18761
  19.     mov BYTE PTR -55[rbp], 0
  20.     mov DWORD PTR -54[rbp], 4802889
  21.     mov BYTE PTR -50[rbp], 0
  22.     mov DWORD PTR -49[rbp], 22089
  23.     mov BYTE PTR -45[rbp], 0
  24.     mov DWORD PTR -44[rbp], 86
  25.     mov BYTE PTR -40[rbp], 0
  26.     mov DWORD PTR -39[rbp], 18774
  27.     mov BYTE PTR -35[rbp], 0
  28.     mov DWORD PTR -34[rbp], 4802902
  29.     mov BYTE PTR -30[rbp], 0
  30.     mov DWORD PTR -29[rbp], 1229539670
  31.     mov BYTE PTR -25[rbp], 0
  32.     mov DWORD PTR -24[rbp], 22601
  33.     mov BYTE PTR -20[rbp], 0
  34.     # map <-
  35.     mov edi, 1024
  36.     call    malloc@PLT
  37.     mov QWORD PTR -80[rbp], rax # dest
  38.     mov rsi, QWORD PTR -80[rbp]
  39.     lea rdi, .LC0[rip] # fmt string
  40.     mov eax, 0
  41.     call    __isoc99_scanf@PLT
  42.     mov rdi, QWORD PTR -80[rbp]
  43.     call    strlen@PLT #strlen(dest)
  44.     mov DWORD PTR -84[rbp], eax # n
  45.     mov eax, DWORD PTR -84[rbp]
  46.     sal eax, 2
  47.     add eax, 1
  48.     cdqe
  49.     mov rdi, rax # 4 * n + 1
  50.     call    malloc@PLT
  51.     mov QWORD PTR -72[rbp], rax # res
  52.     mov DWORD PTR -88[rbp], 0 # i
  53.     jmp .L2
  54. .L3:
  55.     mov eax, DWORD PTR -88[rbp]
  56.     movsx   rdx, eax
  57.     mov rax, QWORD PTR -80[rbp]
  58.     add rax, rdx
  59.     movzx   eax, BYTE PTR [rax]
  60.     movsx   eax, al
  61.     sub eax, 49
  62.     lea rcx, -64[rbp]
  63.     movsx   rdx, eax
  64.     mov rax, rdx
  65.     sal rax, 2
  66.     add rax, rdx
  67.     lea rdx, [rcx+rax]
  68.     mov eax, DWORD PTR -92[rbp]
  69.     movsx   rcx, eax
  70.     mov rax, QWORD PTR -72[rbp]
  71.     add rax, rcx
  72.     mov rsi, rdx # map[dest[i] - '0' - 1]
  73.     mov rdi, rax # res + cnt
  74.     call    strcpy@PLT
  75.     mov rdi, rsi # map[dest[i] - '0' - 1]
  76.     call    strlen@PLT
  77.     add DWORD PTR -92[rbp], eax
  78.     add DWORD PTR -88[rbp], 1 # i++
  79. .L2:
  80.     mov eax, DWORD PTR -88[rbp] # i
  81.     cmp eax, DWORD PTR -84[rbp] # n
  82.     jl  .L3
  83.     mov rdi, QWORD PTR -72[rbp] # res
  84.     call    puts@PLT
  85.     xor eax, eax
  86.     leave
  87.     ret
  88.     .size   main, .-main
  89.    
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement