void Fn( )
{
…………
…………
…………
}
int main( )
{
DWORD dwSizeofFn;
dwSizeofFn = ?????????; // 这里要得到 fn 函数的大小,以便把代码复制到其他地方去
memcpy ( XXXX, XXXXX, dwSizeofFn);
}如上面代码,怎么得到 dwSizeofFn 的值,用字节数!
{
…………
…………
…………
}
int main( )
{
DWORD dwSizeofFn;
dwSizeofFn = ?????????; // 这里要得到 fn 函数的大小,以便把代码复制到其他地方去
memcpy ( XXXX, XXXXX, dwSizeofFn);
}如上面代码,怎么得到 dwSizeofFn 的值,用字节数!
fn 函数体中是我用汇编写的一段代码,已经解决了重定位和函数调用问题。memcpy 是我瞎写的,其实是需要把这段代码复制到其他进程的一段内存中!
把
void Fn( )
{
…………
…………
…………
}
看做是文件,然后用行读取,计算大小
static void myproc(){}
static void Aftermyproc(){}
(UINT)uProcSize =(UINT)Aftermyproc - (UINT)myproc;
uProcSize就是该函数的大小嘿嘿,做代码注入加个static保险些。
{
…………
…………
…………
}
void Fn_end()
{}
UINT dwSizeofFn= (UINT)Fn_end-(UINT)Fn;
static void Aftermyproc(){}
(UINT)uProcSize =(UINT)Aftermyproc - (UINT)myproc;5楼的方法可行,但是考虑连续的两个函数编译出来不一定相邻,而且还有代码边界对齐的问题!两个连续的函数之间会留有一些空间
//这个 void fn() 是用汇编写的, 那大小应该是可以确定的吧, 毕竟汇编不像是 C 语言那样会有编译器加入的其它代码, 在汇编里面用在函数前后加两个标签, 相减得到的大小应该就是吧.
目前我暂时用的就是这个方法,编译release版本还好,编译debug版本的话会有些问题!