学习笔记

1、定义纯汇编的祼函数:

 

void  __declspec(naked) __stdcall NakeFunction()

{

__asm {

nop

ret

}

}

 

2、编译器中断指令用于设置INT 3中断

__debugbreak();

KdBreakPoint();

 

3、内核下修改内存读写属性

VOID WPOFF()
{
  ULONG_PTR cr0 = 0;
  Irql = KeRaiseIrqlToDpcLevel();
  cr0 =__readcr0();
  cr0 &= 0xfffffffffffeffff;
  __writecr0(cr0);


}


VOID WPON()
{


  ULONG_PTR cr0=__readcr0();
  cr0 |= 0x10000;
  __writecr0(cr0);
  KeLowerIrql(Irql);
}

 

4.禁止编译器优化指定函数

#pragma optimize( "", off )

void demo()

{

return;

}

#pragma optimize( "", on )

 

5.利用汇编求宽字符串长度并存到变量dwUrlLen,同时复制到指定变量wzUrl,以下功能相当于wcslen和memcpy

 // 插入一段取出URL串
        pushad
        pushfd
        
        // 求长度
        xor ebx,ebx
        mov ecx,edi
        mov esi,edi
lable:
        mov ax,word ptr ds:[ecx]                ; 循环计算长度
        add ecx,0x2    ;宽字符加2
        cmp ax,bx    ;是否等于0表示结束字符
        jnz short lable
        sub ecx,esi    ;字符串指针开始和结束位置相减差为长度
        sar ecx,1
        mov dword ptr ds:[dwUrlLen], ecx


        // 拷贝字符串
        lea edi,wzUrl
        rep movs word ptr es:[edi],word ptr ds:[esi]

        popfd
        popad

 

6.在64位编程中内嵌汇编代码的写法示例:

文件名:

x64.asm

 

汇编代码:

.code

sub proc

xor rax,rax

ret

sub endp

end

 

编译命令: ml64.exe /c x64.asm

------------------------------------------------

1.引用代码加入下面一行代码:

extern "C" __stdcall sub();

 

2.同时在链接中添加x64.obj

 

2019/01/25

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值