Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- If you will..
- ; Converted from ARM64 to x86-64 assembly (approximate)
- ; Original function: bch2_async_obj_list_read
- bch2_async_obj_list_read:
- 0x0 <+0>: nop
- 0x1 <+1>: nop
- 0x2 <+2>: nop ; ARM paciasp -> nop on x86
- 0x3 <+3>: sub rsp, 0x50 ; sub sp, sp, #0x50
- 0x7 <+7>: mov x3, fs:[0] ; mrs x3, sp_el0 (thread pointer)
- 0xe <+14>: mov [rsp+32], x29 ; stp x29, x30 -> separate stores
- 0x12 <+18>: mov [rsp+40], x30
- 0x16 <+22>: lea x29, [rsp+0x20] ; add x29, sp, #0x20
- 0x1a <+26>: mov [rsp+48], x19 ; stp x19, x20
- 0x1e <+30>: mov [rsp+56], x20
- 0x22 <+34>: mov [rsp+64], x21 ; stp x21, x22
- 0x26 <+38>: mov [rsp+72], x22
- 0x2a <+42>: mov x20, [x0+24] ; ldr x20, [x0, #24]
- 0x2e <+46>: mov x4, [x3+1456] ; ldr x4, [x3, #1456]
- 0x35 <+53>: mov [rsp+24], x4 ; str x4, [sp, #24]
- 0x39 <+57>: xor x4, x4 ; mov x4, #0x0
- 0x3c <+60>: lea x21, [x20+0x48] ; add x21, x20, #0x48
- 0x40 <+64>: mov x0, [x20+64] ; ldr x0, [x20, #64]
- 0x44 <+68>: mov [x20+112], x1 ; stp x1, x2, [x20, #112]
- 0x48 <+72>: mov [x20+120], x2
- 0x4c <+76>: mov x2, 0x40 ; mov x2, #0x40 (64)
- 0x50 <+80>: mov x19, [x20+8] ; ldr x19, [x20, #8]
- 0x54 <+84>: mov qword ptr [x20+128], 0 ; str xzr, [x20, #128]
- 0x5c <+92>: mov [rsp+8], x0 ; str x0, [sp, #8]
- 0x60 <+96>: shl x0, x0, 3 ; lsl x0, x0, #3
- 0x64 <+100>: mov x1, x19 ; mov x1, x19
- 0x67 <+103>: mov [rsp], x0 ; str x0, [sp]
- 0x6b <+107>: mov x0, rsp ; mov x0, sp
- 0x6e <+110>: call __genradix_iter_peek ; bl __genradix_iter_peek
- 0x73 <+115>: test x0, x0 ; cbz x0 (compare and branch if zero)
- 0x76 <+118>: jz 0x156 ; branch to +156
- 0x7c <+124>: mov x22, [x0] ; ldr x22, [x0]
- 0x7f <+127>: test x22, x22 ; cbnz x22 (compare and branch if not zero)
- 0x82 <+130>: jnz 0x216 ; branch to +216
- 0x88 <+136>: mov x0, [rsp] ; ldr x0, [sp]
- 0x8c <+140>: add x0, x0, 0x8 ; adds x0, x0, #0x8
- 0x90 <+144>: jc 0x264 ; b.cs (branch if carry set)
- 0x96 <+150>: mov x1, [rsp+8] ; ldr x1, [sp, #8]
- 0x9a <+154>: add x1, x1, 0x1 ; add x1, x1, #0x1
- 0x9e <+158>: mov [rsp], x0 ; stp x0, x1, [sp]
- 0xa2 <+162>: mov [rsp+8], x1
- 0xa6 <+166>: mov x1, x19 ; mov x1, x19
- 0xa9 <+169>: mov x0, rsp ; mov x0, sp
- 0xac <+172>: mov x2, 0x40 ; mov x2, #0x40 (64)
- 0xb0 <+176>: call __genradix_iter_peek ; bl __genradix_iter_peek
- 0xb5 <+181>: test x0, x0 ; cbnz x0
- 0xb8 <+184>: jnz 0x104 ; branch back to +104
- 0xbe <+190>: mov w1, byte ptr [x20+101] ; ldrb w1, [x20, #101]
- 0xc5 <+197>: mov x0, -12 ; mov x0, #0xfffffffffffffff4 (-12)
- 0xc9 <+201>: test w1, 1 ; tbz w1, #0 (test bit zero)
- 0xcc <+204>: jz 0x280 ; branch if zero
- 0xd2 <+210>: mov x1, fs:[0] ; mrs x1, sp_el0
- 0xd9 <+217>: mov x3, [rsp+24] ; ldr x3, [sp, #24]
- 0xdd <+221>: mov x2, [x1+1456] ; ldr x2, [x1, #1456]
- 0xe4 <+228>: sub x3, x3, x2 ; subs x3, x3, x2
- 0xe7 <+231>: xor x2, x2 ; mov x2, #0x0
- 0xea <+234>: jnz 0x308 ; b.ne (branch if not equal)
- 0xf0 <+240>: mov x29, [rsp+32] ; ldp x29, x30, [sp, #32]
- 0xf4 <+244>: mov x30, [rsp+40]
- 0xf8 <+248>: mov x19, [rsp+48] ; ldp x19, x20, [sp, #48]
- 0xfc <+252>: mov x20, [rsp+56]
- 0x100 <+256>: mov x21, [rsp+64] ; ldp x21, x22, [sp, #64]
- 0x104 <+260>: mov x22, [rsp+72]
- 0x108 <+264>: add rsp, 0x50 ; add sp, sp, #0x50
- 0x10c <+268>: nop ; autiasp -> nop on x86
- 0x10d <+269>: ret ; ret
- 0x10e <+270>: mov x0, x20 ; +216: mov x0, x20
- 0x111 <+273>: call bch2_debugfs_flush_buf ; bl bch2_debugfs_flush_buf
- 0x116 <+278>: test x0, x0 ; cbnz x0
- 0x119 <+281>: jnz 0x168 ; branch to +168
- 0x11f <+287>: mov x0, [x20+120] ; ldr x0, [x20, #120]
- 0x123 <+291>: test x0, x0 ; cbz x0
- 0x126 <+294>: jz 0x156 ; branch to +156
- 0x12c <+300>: mov x2, [x19+32] ; ldr x2, [x19, #32]
- 0x130 <+304>: mov x0, x21 ; mov x0, x21
- 0x133 <+307>: mov x1, x22 ; mov x1, x22
- 0x136 <+310>: call x2 ; blr x2 (indirect call)
- 0x138 <+312>: mov x0, [rsp] ; ldr x0, [sp]
- 0x13c <+316>: add x0, x0, 0x8 ; adds x0, x0, #0x8
- 0x140 <+320>: jnc 0x124 ; b.cc (branch if carry clear)
- 0x146 <+326>: mov x1, -1 ; +264: mov x1, #0xffffffffffffffff (-1)
- 0x14a <+330>: mov x0, x1 ; mov x0, x1
- 0x14d <+333>: mov [rsp], x0 ; stp x0, x1, [sp]
- 0x151 <+337>: mov [rsp+8], x1
- 0x155 <+341>: jmp 0x136 ; b (unconditional branch)
- 0x15a <+346>: mov x0, [rsp+8] ; +280: ldr x0, [sp, #8]
- 0x15e <+350>: mov [x20+64], x0 ; str x0, [x20, #64]
- 0x162 <+354>: mov x0, x20 ; mov x0, x20
- 0x165 <+357>: call bch2_debugfs_flush_buf ; bl bch2_debugfs_flush_buf
- 0x16a <+362>: test x0, x0 ; cbnz x0
- 0x16d <+365>: jnz 0x168 ; branch to +168
- 0x173 <+371>: mov x0, [x20+128] ; ldr x0, [x20, #128]
- 0x177 <+375>: jmp 0x168 ; b (branch to +168)
- 0x17c <+380>: call __stack_chk_fail ; +308: bl __stack_chk_fail
- (gdb) disassemble bch2_async_obj_list_read
- Dump of assembler code for function bch2_async_obj_list_read:
- 0xffff800080727818 <+0>: nop
- 0xffff80008072781c <+4>: nop
- 0xffff800080727820 <+8>: paciasp
- 0xffff800080727824 <+12>: sub sp, sp, #0x50
- 0xffff800080727828 <+16>: mrs x3, sp_el0
- 0xffff80008072782c <+20>: stp x29, x30, [sp, #32]
- 0xffff800080727830 <+24>: add x29, sp, #0x20
- 0xffff800080727834 <+28>: stp x19, x20, [sp, #48]
- 0xffff800080727838 <+32>: stp x21, x22, [sp, #64]
- 0xffff80008072783c <+36>: ldr x20, [x0, #24]
- 0xffff800080727840 <+40>: ldr x4, [x3, #1456]
- 0xffff800080727844 <+44>: str x4, [sp, #24]
- 0xffff800080727848 <+48>: mov x4, #0x0 // #0
- 0xffff80008072784c <+52>: add x21, x20, #0x48
- 0xffff800080727850 <+56>: ldr x0, [x20, #64]
- 0xffff800080727854 <+60>: stp x1, x2, [x20, #112]
- 0xffff800080727858 <+64>: mov x2, #0x40 // #64
- 0xffff80008072785c <+68>: ldr x19, [x20, #8]
- 0xffff800080727860 <+72>: str xzr, [x20, #128]
- 0xffff800080727864 <+76>: str x0, [sp, #8]
- 0xffff800080727868 <+80>: lsl x0, x0, #3
- 0xffff80008072786c <+84>: mov x1, x19
- 0xffff800080727870 <+88>: str x0, [sp]
- 0xffff800080727874 <+92>: mov x0, sp
- 0xffff800080727878 <+96>: bl 0xffff8000808aeb20 <__genradix_iter_peek>
- 0xffff80008072787c <+100>: cbz x0, 0xffff8000807278b4 <bch2_async_obj_list_read+156>
- 0xffff800080727880 <+104>: ldr x22, [x0]
- 0xffff800080727884 <+108>: cbnz x22, 0xffff8000807278f0 <bch2_async_obj_list_read+216>
- 0xffff800080727888 <+112>: ldr x0, [sp]
- 0xffff80008072788c <+116>: adds x0, x0, #0x8
- 0xffff800080727890 <+120>: b.cs 0xffff800080727920 <bch2_async_obj_list_read+264> // b.hs, b.nlast
- 0xffff800080727894 <+124>: ldr x1, [sp, #8]
- 0xffff800080727898 <+128>: add x1, x1, #0x1
- 0xffff80008072789c <+132>: stp x0, x1, [sp]
- 0xffff8000807278a0 <+136>: mov x1, x19
- 0xffff8000807278a4 <+140>: mov x0, sp
- 0xffff8000807278a8 <+144>: mov x2, #0x40 // #64
- 0xffff8000807278ac <+148>: bl 0xffff8000808aeb20 <__genradix_iter_peek>
- 0xffff8000807278b0 <+152>: cbnz x0, 0xffff800080727880 <bch2_async_obj_list_read+104>
- 0xffff8000807278b4 <+156>: ldrb w1, [x20, #101]
- 0xffff8000807278b8 <+160>: mov x0, #0xfffffffffffffff4 // #-12
- 0xffff8000807278bc <+164>: tbz w1, #0, 0xffff800080727930 <bch2_async_obj_list_read+280>
- 0xffff8000807278c0 <+168>: mrs x1, sp_el0
- 0xffff8000807278c4 <+172>: ldr x3, [sp, #24]
- 0xffff8000807278c8 <+176>: ldr x2, [x1, #1456]
- 0xffff8000807278cc <+180>: subs x3, x3, x2
- 0xffff8000807278d0 <+184>: mov x2, #0x0 // #0
- 0xffff8000807278d4 <+188>: b.ne 0xffff80008072794c <bch2_async_obj_list_read+308> // b.any
- 0xffff8000807278d8 <+192>: ldp x29, x30, [sp, #32]
- 0xffff8000807278dc <+196>: ldp x19, x20, [sp, #48]
- 0xffff8000807278e0 <+200>: ldp x21, x22, [sp, #64]
- 0xffff8000807278e4 <+204>: add sp, sp, #0x50
- 0xffff8000807278e8 <+208>: autiasp
- 0xffff8000807278ec <+212>: ret
- 0xffff8000807278f0 <+216>: mov x0, x20
- 0xffff8000807278f4 <+220>: bl 0xffff800080657de8 <bch2_debugfs_flush_buf>
- 0xffff8000807278f8 <+224>: cbnz x0, 0xffff8000807278c0 <bch2_async_obj_list_read+168>
- 0xffff8000807278fc <+228>: ldr x0, [x20, #120]
- 0xffff800080727900 <+232>: cbz x0, 0xffff8000807278b4 <bch2_async_obj_list_read+156>
- 0xffff800080727904 <+236>: ldr x2, [x19, #32]
- 0xffff800080727908 <+240>: mov x0, x21
- 0xffff80008072790c <+244>: mov x1, x22
- 0xffff800080727910 <+248>: blr x2
- 0xffff800080727914 <+252>: ldr x0, [sp]
- 0xffff800080727918 <+256>: adds x0, x0, #0x8
- 0xffff80008072791c <+260>: b.cc 0xffff800080727894 <bch2_async_obj_list_read+124> // b.lo, b.ul, b.last
- 0xffff800080727920 <+264>: mov x1, #0xffffffffffffffff // #-1
- 0xffff800080727924 <+268>: mov x0, x1
- 0xffff800080727928 <+272>: stp x0, x1, [sp]
- 0xffff80008072792c <+276>: b 0xffff8000807278a0 <bch2_async_obj_list_read+136>
- 0xffff800080727930 <+280>: ldr x0, [sp, #8]
- 0xffff800080727934 <+284>: str x0, [x20, #64]
- 0xffff800080727938 <+288>: mov x0, x20
- 0xffff80008072793c <+292>: bl 0xffff800080657de8 <bch2_debugfs_flush_buf>
- 0xffff800080727940 <+296>: cbnz x0, 0xffff8000807278c0 <bch2_async_obj_list_read+168>
- 0xffff800080727944 <+300>: ldr x0, [x20, #128]
- 0xffff800080727948 <+304>: b 0xffff8000807278c0 <bch2_async_obj_list_read+168>
- 0xffff80008072794c <+308>: bl 0xffff800080ef5c80 <__stack_chk_fail>
- End of assembler dump.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement