汇编学习
- 64位 nasm 学习网站 https://cs.lmu.edu/~ray/notes/nasmtutorial/
nasm汇编博客资料 (写的不错 ,通俗易懂) https://blog.csdn.net/qq_31917799/category_9285609.html
- 32位 nasm 学习网站 https://asmtutor.com/#lesson1
图文 汇编 学习资料 https://www.ruanyifeng.com/blog/2018/01/assembly-language-primer.html
坑
- 在64位的情况下,不要用 INT80H 调用系统调动,需要用syscall 原因 : ~ https://stackoverflow.com/questions/46087730/what-happens-if-you-use-the-32-bit-int-0x80-linux-abi-in-64-bit-code ~ https://stackoverflow.com/questions/47023590/cant-print-a-linefeed-that-was-pushed-on-the-stack-in-nasm
根据System V AMD64 ABI规范我们,函数的前6个参数是通过寄存器来传递,其他的通过栈来传递。
rdi是第一个参数
rsi是第二个参数
rdx是第三个参数
rcx是第四个参数(如果系统调用函数的话是r10寄存器)
r8是第五个参数
r9是第六个参数
X86-64系统调用使用syscall指令.该指令将返回地址保存到rcx,会破坏rcx。所以使用r10寄存器了。
-
有压栈操作,一定要有对等的弹栈操作,不然会发生段错误 segment fault
-
在gdb中,查看main函数反汇编代码
(在gdb中输入disassemble main) 反汇编一个函数 disass func_name
-
nasm汇编 GDB单步调试 参考地址 https://blog.csdn.net/qq_31917799/article/details/87915432 默认是gas汇编 (gdb)set disassembly-flavor intel 可以修改为intel汇编
-
EIP 就是一个是记录运行到哪里了 EBP 一个是函数的地址
-
汇编写携程 资料1 : https://note.isliberty.me/article/61 资料2 : https://zhuanlan.zhihu.com/p/220025846
fmmpeg 视频处理命令行学习 ①https://www.bilibili.com/read/cv17408017/ ②https://www.bilibili.com/read/cv3159777/
视频按时间切割 ffmpeg -ss 00:16:29 -to 00:23:03 -i "test.mp4" -vcodec copy -acodec copy cut.mp4 -y 无损提取音频 ffmpeg -i "cut.mp4" -vn -acodec copy A.aac 合并视频和声音 ffmpeg -i "cut.mp4" -i "cut.aac" -c copy -map 0:v:0 -map 1:a:0 "new.mp4"