gcc test.c -o test.out
----
test.c -> test.s -> test.o -> test.out
as test.s -o test.o
ld test.o -o test.out
./test.out
提取shellcode:
objdump -d shellcode_execve | grep "[0-9a-f]" | grep -v "file" | cut -f2 -d: | cut -f1-6 -d' '| tr -s ' '| tr '\t' ' '| sed 's/ $//g'| sed 's/ /\\x/g' | paste -d '' -s | sed 's/^/"/' | sed 's/$/"/g'
64位和32位的寄存器和汇编的比较
https://blog.csdn.net/qq_29343201/article/details/51278798
32位终端,系统调用对应表
http://blog.chinaunix.net/uid-28458801-id-3477399.html
栈结构
https://www.huaweicloud.com/articles/76d0abbffec2d0d7bd315d6813701e8a.html
Y86-64 指令字节数 及 指令编码
如何得到指令编码?小端法机器上
x86_64汇编入门
pushq %rax == subq $8, %rsp; movq %rax, (%rsp)
popq %rax == movq (%rsp), %rax; addq $8, %rsp
call func == pushq %rip; jmp func