首页
社区
课程
招聘
[求助]如何在C++中引用内联汇编中的标号,求助以下
发表于: 2009-10-22 17:40 4952

[求助]如何在C++中引用内联汇编中的标号,求助以下

2009-10-22 17:40
4952
在网上搜了一下,大都讲的是用GOTO语句可以跳到内联汇编代码中去,要么从内联汇编中跳到其他C++块中的标号.我在内联汇编中使用了2个标号(假如是m1,m2),主要是想确定m1,m2之间的汇编代码的大小,我在内联汇编之外的C++代码地方引用,VC6就会报错,象这样调用就会报错:GlobalAlloc(GPTR,m2-m1);

该怎么解决这中这种问题呢?求教一下

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 225
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
难道都没人知道吗?
2009-10-22 19:21
0
雪    币: 223
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
call label1
label1:
2009-10-24 08:07
0
雪    币: 17
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
可以在 C/C++ 里面使用 goto 转跳到 __asm 块中的标号处,也可以在 __asm 块中转跳到 __asm 块里面或外面的标号处。__asm 块内的标号是不区分大小写的(指令、指示符等也是不区分大小写的)。例如:

        void MyFunction()
        {
            goto C_Dest;    /* 正确 */
            goto c_dest;    /* 错误 */

            goto A_Dest;    /* 正确 */
            goto a_dest;    /* 正确 */

            __asm
            {
                JMP C_Dest  ; 正确
                JMP c_dest  ; 错误

                JMP A_Dest  ; 正确
                JMP a_dest  ; 正确

        a_dest:             ; __asm 标号
            }

        C_Dest:             /* C/C++ 标号 */
            return;
        }

    不要使用函数名称当作标号,否则将转跳到函数中执行,而不是标号处。例如,由于 exit 是 C/C++ 的函数,下面的转跳将不会到 exit 标号处:

        ; 错误:使用函数名作为标号
        JNE exit
        .
        .
        .
        exit:
        .
        .
        .

    美元符号"$"用于指定当前指令位置,常用于条件跳转中,例如:

        JNE $+5     ; 下面这条指令的长度是 5 个字节
        JMP _Label
        NOP         ; $+5,转跳到了这里
        .
        .
        .
        _Label:
        .
        .
        .
2009-10-25 10:41
0
游客
登录 | 注册 方可回帖
返回
//