之前的笔记搬运
16位和32位汇编差异
其实到了32位汇编, 其实用radasm写32汇编和写C的感觉就差不多了
如下这段, 就是远程线程注入的一段
1 | DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM |
软件断点的原理
把需要断点的位置一字节保存, 再改为CC -> 系统执行执行到CC抛出异常停止 ->
把保存的一字节还原
上述就是断点的执行步骤
hex: cc
asm: int 3
ascii 烫
联合编译:
把C和ASM都编译成OBJ, 在进行手工链接
把ASM编译成DLL, 使用C语言调用
内联汇编:
关键字: __asm
使用方法:
1 | __asm { mov eax,eax mov ebx,ebx} |
使用内联汇编可以在编译C语言中内嵌汇编代码
使用注意:
1 | 1. 需要注意保存寄存器环境, 如pushad和pushf |
裸函数
关键字: __declspec(naked)
使用方法: 在函数前加上关键字修饰
这样的函数在编译后就不会生成任何二进制代码, 可以用于编写纯汇编函数
使用注意:
1 | 1. 由于没有生成任何汇编代码, 那么保存环境, 开辟局部变量空间就需要自己来完成 |