Advertisement
RIC21000

Zig Hello World to Assembly

Oct 7th, 2024
432
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     .text
  2.     .intel_syntax noprefix
  3.     .file   "main"
  4.     .globl  _start
  5.     .p2align    4, 0x90
  6.     .type   _start,@function
  7. _start:
  8.     .cfi_startproc
  9.     #APP
  10.     xor ebp, ebp
  11.     mov rdi, rsp
  12.     and rsp, -16
  13.     call    start.posixCallMainAndExit
  14.     #NO_APP
  15. .Lfunc_end0:
  16.     .size   _start, .Lfunc_end0-_start
  17.     .cfi_endproc
  18.  
  19.     .p2align    4, 0x90
  20.     .type   start.posixCallMainAndExit,@function
  21. start.posixCallMainAndExit:
  22.     .cfi_startproc
  23.     push    rbp
  24.     .cfi_def_cfa_offset 16
  25.     push    r15
  26.     .cfi_def_cfa_offset 24
  27.     push    r14
  28.     .cfi_def_cfa_offset 32
  29.     push    r13
  30.     .cfi_def_cfa_offset 40
  31.     push    r12
  32.     .cfi_def_cfa_offset 48
  33.     push    rbx
  34.     .cfi_def_cfa_offset 56
  35.     sub rsp, 40
  36.     .cfi_def_cfa_offset 96
  37.     .cfi_offset rbx, -56
  38.     .cfi_offset r12, -48
  39.     .cfi_offset r13, -40
  40.     .cfi_offset r14, -32
  41.     .cfi_offset r15, -24
  42.     .cfi_offset rbp, -16
  43.     mov r12, qword ptr [rdi]
  44.     mov rbx, rdi
  45.     mov rbp, -1
  46.     add rbx, 8
  47.     lea r13, [rdi + 8*r12 + 16]
  48.     mov rax, r13
  49.     .p2align    4, 0x90
  50. .LBB1_1:
  51.     add rbp, 1
  52.     cmp qword ptr [rax], 0
  53.     lea rax, [rax + 8]
  54.     jne .LBB1_1
  55.     lea rcx, [rax - 8]
  56.     xor r14d, r14d
  57.     xor r15d, r15d
  58.     jmp .LBB1_4
  59. .LBB1_7:
  60.     mov r15, qword ptr [rcx]
  61.     .p2align    4, 0x90
  62. .LBB1_4:
  63.     mov rdx, qword ptr [rcx + 8]
  64.     add rcx, 16
  65.     cmp rdx, 3
  66.     je  .LBB1_7
  67.     cmp rdx, 5
  68.     je  .LBB1_3
  69.     test    rdx, rdx
  70.     jne .LBB1_4
  71.     jmp .LBB1_8
  72. .LBB1_3:
  73.     mov r14, qword ptr [rcx]
  74.     jmp .LBB1_4
  75. .LBB1_8:
  76.     mov qword ptr [rip + os.linux.elf_aux_maybe], rax
  77.     movabs  rcx, -6148914691236517206
  78.     test    r14, r14
  79.     mov eax, 8
  80.     mov rdx, -1
  81.     je  .LBB1_9
  82.     xor esi, esi
  83.     mov r8, r14
  84.     mov r9, r15
  85.     xor edi, edi
  86.     jmp .LBB1_13
  87.     .p2align    4, 0x90
  88. .LBB1_11:
  89.     mov rdi, r15
  90.     sub rdi, qword ptr [r9 + 16]
  91. .LBB1_12:
  92.     add r9, 56
  93.     add r8, -1
  94.     je  .LBB1_16
  95. .LBB1_13:
  96.     mov r10d, dword ptr [r9]
  97.     cmp r10d, 6
  98.     je  .LBB1_11
  99.     cmp r10d, 7
  100.     jne .LBB1_12
  101.     mov rsi, r9
  102.     jmp .LBB1_12
  103. .LBB1_16:
  104.     test    rsi, rsi
  105.     jne .LBB1_18
  106. .LBB1_9:
  107.     xor r8d, r8d
  108.     jmp .LBB1_19
  109. .LBB1_18:
  110.     add rdi, qword ptr [rsi + 16]
  111.     mov rdx, qword ptr [rsi + 40]
  112.     mov rax, qword ptr [rsi + 48]
  113.     mov r8, qword ptr [rsi + 32]
  114.     add rdx, -1
  115.     mov rcx, rdi
  116. .LBB1_19:
  117.     mov rdi, rax
  118.     add rdx, rax
  119.     mov qword ptr [rip + os.linux.tls.area_desc.1], rax
  120.     mov qword ptr [rip + os.linux.tls.area_desc.4.0], rcx
  121.     mov qword ptr [rip + os.linux.tls.area_desc.4.1], r8
  122.     neg rdi
  123.     and rdi, rdx
  124.     lea rsi, [rdi + 23]
  125.     mov qword ptr [rip + os.linux.tls.area_desc.3], rdi
  126.     and rsi, -8
  127.     cmp rax, 4096
  128.     lea rdx, [rsi + 16]
  129.     mov qword ptr [rip + os.linux.tls.area_desc.2], rsi
  130.     mov qword ptr [rip + os.linux.tls.area_desc.0], rdx
  131.     ja  .LBB1_21
  132.     cmp rsi, 8433
  133.     jb  .LBB1_24
  134. .LBB1_21:
  135.     lea rsi, [rax + rdx - 1]
  136.     mov eax, 9
  137.     mov edx, 3
  138.     mov r10d, 34
  139.     xor edi, edi
  140.     mov r8, -1
  141.     xor r9d, r9d
  142.     #APP
  143.     syscall
  144.     #NO_APP
  145.     test    rax, rax
  146.     jns .LBB1_23
  147.     ud2
  148. .LBB1_23:
  149.     mov rcx, qword ptr [rip + os.linux.tls.area_desc.1]
  150.     mov rdx, qword ptr [rip + os.linux.tls.area_desc.0]
  151.     add rax, rcx
  152.     add rax, -1
  153.     neg rcx
  154.     and rcx, rax
  155.     mov rax, rcx
  156.     jmp .LBB1_25
  157. .LBB1_24:
  158.     mov eax, offset os.linux.tls.main_thread_area_buffer
  159. .LBB1_25:
  160.     mov rdi, rax
  161.     xor esi, esi
  162.     mov qword ptr [rsp + 24], rax
  163.     call    memset@PLT
  164.     mov rax, qword ptr [rip + os.linux.tls.area_desc.3]
  165.     mov rdi, qword ptr [rsp + 24]
  166.     lea rcx, [rdi + rax]
  167.     mov qword ptr [rdi + rax], rcx
  168.     mov qword ptr [rsp + 32], rcx
  169.     mov rax, qword ptr [rip + os.linux.tls.area_desc.2]
  170.     mov qword ptr [rdi + rax], 1
  171.     mov qword ptr [rdi + rax + 8], rdi
  172.     mov rsi, qword ptr [rip + os.linux.tls.area_desc.4.0]
  173.     mov rdx, qword ptr [rip + os.linux.tls.area_desc.4.1]
  174.     call    memcpy@PLT
  175.     mov eax, 158
  176.     mov edi, 4098
  177.     mov rsi, qword ptr [rsp + 32]
  178.     #APP
  179.     syscall
  180.     #NO_APP
  181.     test    r14, r14
  182.     je  .LBB1_32
  183.     .p2align    4, 0x90
  184. .LBB1_26:
  185.     cmp dword ptr [r15], 1685382481
  186.     je  .LBB1_28
  187.     add r15, 56
  188.     add r14, -1
  189.     jne .LBB1_26
  190.     jmp .LBB1_32
  191. .LBB1_28:
  192.     lea r10, [rsp + 8]
  193.     mov eax, 302
  194.     mov esi, 3
  195.     xor edi, edi
  196.     xor edx, edx
  197.     #APP
  198.     syscall
  199.     #NO_APP
  200.     cmp rax, -4095
  201.     jb  .LBB1_30
  202.     movzx   eax, ax
  203.     test    rax, rax
  204.     jne .LBB1_32
  205. .LBB1_30:
  206.     mov rax, qword ptr [rsp + 16]
  207.     mov rcx, qword ptr [r15 + 40]
  208.     cmp rcx, rax
  209.     cmovae  rcx, rax
  210.     cmp rcx, qword ptr [rsp + 8]
  211.     jbe .LBB1_32
  212.     mov qword ptr [rsp + 8], rcx
  213.     mov qword ptr [rsp + 16], rax
  214.     lea rdx, [rsp + 8]
  215.     mov eax, 302
  216.     xor edi, edi
  217.     xor r10d, r10d
  218.     #APP
  219.     syscall
  220.     #NO_APP
  221. .LBB1_32:
  222.     mov r14, qword ptr [rip + __init_array_end@GOTPCREL]
  223.     cmp r14, qword ptr [rip + __init_array_start@GOTPCREL]
  224.     je  .LBB1_35
  225.     mov r15, qword ptr [rip + __init_array_start@GOTPCREL]
  226.     sub r14, r15
  227.     shr r14, 3
  228.     cmp r14, 1
  229.     adc r14, 0
  230.     .p2align    4, 0x90
  231. .LBB1_34:
  232.     mov rax, qword ptr [r15]
  233.     call    rax
  234.     add r15, 8
  235.     add r14, -1
  236.     jne .LBB1_34
  237. .LBB1_35:
  238.     mov qword ptr [rip + os.argv], rbx
  239.     mov qword ptr [rip + os.environ], r13
  240.     mov qword ptr [rip + os.argv+8], r12
  241.     mov qword ptr [rip + os.environ+8], rbp
  242.     call    start.maybeIgnoreSigpipe
  243.     call    main.main
  244.     mov eax, 231
  245.     xor edi, edi
  246.     #APP
  247.     syscall
  248.     #NO_APP
  249. .Lfunc_end1:
  250.     .size   start.posixCallMainAndExit, .Lfunc_end1-start.posixCallMainAndExit
  251.     .cfi_endproc
  252.  
  253.     .p2align    4, 0x90
  254.     .type   main.main,@function
  255. main.main:
  256.     .cfi_startproc
  257.     push    rbx
  258.     .cfi_def_cfa_offset 16
  259.     .cfi_offset rbx, -16
  260.     cmp byte ptr fs:[Thread.LinuxThreadImpl.tls_thread_id.1@TPOFF], 1
  261.     jne .LBB2_2
  262.     mov eax, dword ptr fs:[Thread.LinuxThreadImpl.tls_thread_id.0@TPOFF]
  263.     cmp dword ptr [rip + Progress.stderr_mutex+12], eax
  264.     je  .LBB2_4
  265. .LBB2_5:
  266.     lock        bts dword ptr [rip + Progress.stderr_mutex+8], 0
  267.     jb  .LBB2_6
  268. .LBB2_7:
  269.     mov dword ptr [rip + Progress.stderr_mutex+12], eax
  270.     mov eax, 1
  271.     jmp .LBB2_8
  272. .LBB2_2:
  273.     mov eax, 186
  274.     #APP
  275.     syscall
  276.     #NO_APP
  277.     mov dword ptr fs:[Thread.LinuxThreadImpl.tls_thread_id.0@TPOFF], eax
  278.     mov byte ptr fs:[Thread.LinuxThreadImpl.tls_thread_id.1@TPOFF], 1
  279.     cmp dword ptr [rip + Progress.stderr_mutex+12], eax
  280.     jne .LBB2_5
  281. .LBB2_4:
  282.     mov rax, qword ptr [rip + Progress.stderr_mutex]
  283.     add rax, 1
  284. .LBB2_8:
  285.     xor r8d, r8d
  286.     xor r9d, r9d
  287.     mov edi, 2
  288.     mov qword ptr [rip + Progress.stderr_mutex], rax
  289. .LBB2_9:
  290.     mov edx, 12
  291.     lea rsi, [r9 + __anon_1560]
  292.     sub rdx, r9
  293.     .p2align    4, 0x90
  294. .LBB2_10:
  295.     mov eax, 1
  296.     #APP
  297.     syscall
  298.     #NO_APP
  299.     mov ecx, eax
  300.     neg ecx
  301.     cmp rax, -4095
  302.     cmovb   ecx, r8d
  303.     cmp cx, 4
  304.     je  .LBB2_10
  305.     movzx   ecx, cx
  306.     test    ecx, ecx
  307.     jne .LBB2_16
  308.     add r9, rax
  309.     cmp r9, 12
  310.     jne .LBB2_9
  311.     add qword ptr [rip + Progress.stderr_mutex], -1
  312.     jne .LBB2_19
  313.     mov dword ptr [rip + Progress.stderr_mutex+12], -1
  314.     xor eax, eax
  315.     xchg    dword ptr [rip + Progress.stderr_mutex+8], eax
  316.     cmp eax, 3
  317.     jne .LBB2_19
  318.     mov eax, 202
  319.     mov edi, offset Progress.stderr_mutex+8
  320.     mov esi, 129
  321.     mov edx, 1
  322.     #APP
  323.     syscall
  324.     #NO_APP
  325.     pop rbx
  326.     .cfi_def_cfa_offset 8
  327.     ret
  328. .LBB2_16:
  329.     .cfi_def_cfa_offset 16
  330.     add qword ptr [rip + Progress.stderr_mutex], -1
  331.     je  .LBB2_17
  332. .LBB2_19:
  333.     pop rbx
  334.     .cfi_def_cfa_offset 8
  335.     ret
  336. .LBB2_17:
  337.     .cfi_def_cfa_offset 16
  338.     mov dword ptr [rip + Progress.stderr_mutex+12], -1
  339.     xor eax, eax
  340.     xchg    dword ptr [rip + Progress.stderr_mutex+8], eax
  341.     cmp eax, 3
  342.     jne .LBB2_19
  343.     mov eax, 202
  344.     mov edi, offset Progress.stderr_mutex+8
  345.     mov esi, 129
  346.     mov edx, 1
  347.     #APP
  348.     syscall
  349.     #NO_APP
  350.     pop rbx
  351.     .cfi_def_cfa_offset 8
  352.     ret
  353. .LBB2_6:
  354.     .cfi_def_cfa_offset 16
  355.     mov rbx, rax
  356.     call    Thread.Mutex.FutexImpl.lockSlow
  357.     mov rax, rbx
  358.     jmp .LBB2_7
  359. .Lfunc_end2:
  360.     .size   main.main, .Lfunc_end2-main.main
  361.     .cfi_endproc
  362.  
  363.     .p2align    4, 0x90
  364.     .type   start.maybeIgnoreSigpipe,@function
  365. start.maybeIgnoreSigpipe:
  366.     .cfi_startproc
  367.     mov qword ptr [rsp - 32], offset start.noopSigHandler
  368.     mov qword ptr [rsp - 24], 67108864
  369.     mov qword ptr [rsp - 16], offset os.linux.x86_64.restore_rt
  370.     mov qword ptr [rsp - 8], 0
  371.     lea rsi, [rsp - 32]
  372.     mov eax, 13
  373.     mov edi, 13
  374.     mov r10d, 8
  375.     xor edx, edx
  376.     #APP
  377.     syscall
  378.     #NO_APP
  379.     ret
  380. .Lfunc_end3:
  381.     .size   start.maybeIgnoreSigpipe, .Lfunc_end3-start.maybeIgnoreSigpipe
  382.     .cfi_endproc
  383.  
  384.     .p2align    4, 0x90
  385.     .type   start.noopSigHandler,@function
  386. start.noopSigHandler:
  387.     .cfi_startproc
  388.     ret
  389. .Lfunc_end4:
  390.     .size   start.noopSigHandler, .Lfunc_end4-start.noopSigHandler
  391.     .cfi_endproc
  392.  
  393.     .p2align    4, 0x90
  394.     .type   os.linux.x86_64.restore_rt,@function
  395. os.linux.x86_64.restore_rt:
  396.     .cfi_startproc
  397.     mov eax, 15
  398.     #APP
  399.     syscall
  400.     #NO_APP
  401. .Lfunc_end5:
  402.     .size   os.linux.x86_64.restore_rt, .Lfunc_end5-os.linux.x86_64.restore_rt
  403.     .cfi_endproc
  404.  
  405.     .section    .text.unlikely.,"ax",@progbits
  406.     .p2align    4, 0x90
  407.     .type   Thread.Mutex.FutexImpl.lockSlow,@function
  408. Thread.Mutex.FutexImpl.lockSlow:
  409.     .cfi_startproc
  410.     mov eax, dword ptr [rip + Progress.stderr_mutex+8]
  411.     cmp eax, 3
  412.     jne .LBB6_1
  413.     mov eax, 202
  414.     mov edi, offset Progress.stderr_mutex+8
  415.     mov esi, 128
  416.     mov edx, 3
  417.     xor r10d, r10d
  418.     #APP
  419.     syscall
  420.     #NO_APP
  421. .LBB6_1:
  422.     mov eax, 3
  423.     xchg    dword ptr [rip + Progress.stderr_mutex+8], eax
  424.     test    eax, eax
  425.     je  .LBB6_4
  426.     mov edi, offset Progress.stderr_mutex+8
  427.     mov esi, 128
  428.     mov edx, 3
  429.     .p2align    4, 0x90
  430. .LBB6_3:
  431.     mov eax, 202
  432.     xor r10d, r10d
  433.     #APP
  434.     syscall
  435.     #NO_APP
  436.     mov eax, 3
  437.     xchg    dword ptr [rip + Progress.stderr_mutex+8], eax
  438.     test    eax, eax
  439.     jne .LBB6_3
  440. .LBB6_4:
  441.     ret
  442. .Lfunc_end6:
  443.     .size   Thread.Mutex.FutexImpl.lockSlow, .Lfunc_end6-Thread.Mutex.FutexImpl.lockSlow
  444.     .cfi_endproc
  445.  
  446.     .text
  447.     .weak   getauxval
  448.     .p2align    4, 0x90
  449.     .type   getauxval,@function
  450. getauxval:
  451.     .cfi_startproc
  452.     mov rcx, qword ptr [rip + os.linux.elf_aux_maybe]
  453.     test    rcx, rcx
  454.     je  .LBB7_1
  455.     mov rdx, qword ptr [rcx]
  456.     test    rdx, rdx
  457.     je  .LBB7_1
  458.     add rcx, 16
  459.     xor eax, eax
  460.     .p2align    4, 0x90
  461. .LBB7_5:
  462.     cmp rdx, rdi
  463.     je  .LBB7_6
  464.     mov rdx, qword ptr [rcx]
  465.     add rcx, 16
  466.     test    rdx, rdx
  467.     jne .LBB7_5
  468.     ret
  469. .LBB7_1:
  470.     xor eax, eax
  471.     ret
  472. .LBB7_6:
  473.     mov rax, qword ptr [rcx - 8]
  474.     ret
  475. .Lfunc_end7:
  476.     .size   getauxval, .Lfunc_end7-getauxval
  477.     .cfi_endproc
  478.  
  479.     .type   os.linux.elf_aux_maybe,@object
  480.     .local  os.linux.elf_aux_maybe
  481.     .comm   os.linux.elf_aux_maybe,8,8
  482.     .type   os.argv,@object
  483.     .local  os.argv
  484.     .comm   os.argv,16,8
  485.     .type   os.environ,@object
  486.     .local  os.environ
  487.     .comm   os.environ,16,8
  488.     .type   os.linux.tls.area_desc.0,@object
  489.     .local  os.linux.tls.area_desc.0
  490.     .comm   os.linux.tls.area_desc.0,8,8
  491.     .type   os.linux.tls.area_desc.1,@object
  492.     .local  os.linux.tls.area_desc.1
  493.     .comm   os.linux.tls.area_desc.1,8,8
  494.     .type   os.linux.tls.area_desc.2,@object
  495.     .local  os.linux.tls.area_desc.2
  496.     .comm   os.linux.tls.area_desc.2,8,8
  497.     .type   os.linux.tls.area_desc.3,@object
  498.     .local  os.linux.tls.area_desc.3
  499.     .comm   os.linux.tls.area_desc.3,8,8
  500.     .type   os.linux.tls.area_desc.4.0,@object
  501.     .local  os.linux.tls.area_desc.4.0
  502.     .comm   os.linux.tls.area_desc.4.0,8,8
  503.     .type   os.linux.tls.area_desc.4.1,@object
  504.     .local  os.linux.tls.area_desc.4.1
  505.     .comm   os.linux.tls.area_desc.4.1,8,8
  506.     .type   os.linux.tls.main_thread_area_buffer,@object
  507.     .local  os.linux.tls.main_thread_area_buffer
  508.     .comm   os.linux.tls.main_thread_area_buffer,8448,4096
  509.     .type   Progress.stderr_mutex,@object
  510.     .data
  511.     .p2align    3, 0x0
  512. Progress.stderr_mutex:
  513.     .quad   0
  514.     .zero   4
  515.     .long   4294967295
  516.     .size   Progress.stderr_mutex, 16
  517.  
  518.     .type   __anon_1560,@object
  519.     .section    .rodata.str1.1,"aMS",@progbits,1
  520. __anon_1560:
  521.     .asciz  "Hello World\n"
  522.     .size   __anon_1560, 13
  523.  
  524.     .type   Thread.LinuxThreadImpl.tls_thread_id.0,@object
  525.     .section    .tbss,"awT",@nobits
  526.     .p2align    2, 0x0
  527. Thread.LinuxThreadImpl.tls_thread_id.0:
  528.     .zero   4
  529.     .size   Thread.LinuxThreadImpl.tls_thread_id.0, 4
  530.  
  531.     .type   Thread.LinuxThreadImpl.tls_thread_id.1,@object
  532.     .p2align    2, 0x0
  533. Thread.LinuxThreadImpl.tls_thread_id.1:
  534.     .byte   0
  535.     .size   Thread.LinuxThreadImpl.tls_thread_id.1, 1
  536.  
  537.     .weak   __init_array_end
  538.     .weak   __init_array_start
  539.     .section    ".note.GNU-stack","",@progbits
  540.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement