- UID
- 66114
注册时间2010-4-1
阅读权限30
最后登录1970-1-1
龙战于野
TA的每日心情 | 慵懒 2019-3-12 17:25 |
---|
签到天数: 3 天 [LV.2]偶尔看看I
|
本帖最后由 whypro 于 2010-6-2 18:32 编辑
SMC是什么意思?它的英文名叫“Self Modifying Code”,顾名思义,就是“代码自修改”
先来个简单的,来改数据
代码:
CString cs1,cs2;
cs1="123456789";
cs2="abcdefghi";
__asm
{
mov esi,cs1//A函数地址
mov edi,cs2//B函数地址
mov ecx,9h
rep movsb
}
MessageBox(cs2);
通过MOVSB命令来改变数据
下面来看怎样代码:
代码:
void CSMCDlg::OnOK()
{
msgboxB();
BOOL (CSMCDlg::*pa)(void)=&CSMCDlg::msgboxA;
BOOL (CSMCDlg::*pb)(void)=&CSMCDlg::msgboxB;
__asm
{
mov esi,pa
mov edi,pb
mov ecx,pb
sub ecx,esi//长度要注意,这里因为A.B写得很近所以可以这样得出
rep movsb
}
msgboxB();
}
BOOL CSMCDlg::msgboxA()
{
::MessageBox(m_hWnd,"123456789","LILI",0);
return true;
}
BOOL CSMCDlg::msgboxB()
{
::MessageBox(m_hWnd,"987654321","LILI",0);
return true;
}
#pragma comment(linker, "/SECTION:.text,ERW")//.text段一定要改成可读写
这就是SMC的基本原理,用一段代码来覆盖别一段代码(注意代码的长度)
希望大家给点建议!
SMC.rar
(26.69 KB, 下载次数: 2)
|
|