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);
下面来看怎样代码:
代码:
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段一定要改成可读写
希望大家给点建议!