void Fn( )
{
…………
…………
…………
}
int main( )
{
DWORD dwSizeofFn;
dwSizeofFn = ?????????; // 这里要得到 fn 函数的大小,以便把代码复制到其他地方去
memcpy ( XXXX, XXXXX, dwSizeofFn);
}如上面代码,怎么得到 dwSizeofFn 的值,用字节数!

解决方案 »

  1.   


    fn 函数体中是我用汇编写的一段代码,已经解决了重定位和函数调用问题。memcpy 是我瞎写的,其实是需要把这段代码复制到其他进程的一段内存中!
      

  2.   

    哈,个人思路:

    void Fn( )
    {
        …………
        …………
        …………
    }
    看做是文件,然后用行读取,计算大小
      

  3.   

    在需要得到函数大小的后面定义一个空函数
    static void myproc(){}
    static void Aftermyproc(){}
    (UINT)uProcSize =(UINT)Aftermyproc - (UINT)myproc;
    uProcSize就是该函数的大小嘿嘿,做代码注入加个static保险些。
      

  4.   

    楼上正解void Fn( )
    {
        …………
        …………
        …………
    }
    void Fn_end()
    {}
    UINT dwSizeofFn= (UINT)Fn_end-(UINT)Fn;
      

  5.   

    如果void Fn( )在你的程序中,可以看编译后的长度,(fn的首地址是知道的)
      

  6.   

    这个 void fn() 是用汇编写的, 那大小应该是可以确定的吧, 毕竟汇编不像是 C 语言那样会有编译器加入的其它代码, 在汇编里面用在函数前后加两个标签, 相减得到的大小应该就是吧.
      

  7.   

    谢谢大家,学习了:static void myproc(){}
    static void Aftermyproc(){}
    (UINT)uProcSize =(UINT)Aftermyproc - (UINT)myproc;5楼的方法可行,但是考虑连续的两个函数编译出来不一定相邻,而且还有代码边界对齐的问题!两个连续的函数之间会留有一些空间
    //这个 void fn() 是用汇编写的, 那大小应该是可以确定的吧, 毕竟汇编不像是 C 语言那样会有编译器加入的其它代码, 在汇编里面用在函数前后加两个标签, 相减得到的大小应该就是吧.
    目前我暂时用的就是这个方法,编译release版本还好,编译debug版本的话会有些问题!