小编Kir*_*ill的帖子

在CodeView中单步执行时,EBX的高位被清零

我有以下用MASM为i386处理器编写的简单程序:

        TITLE   BLA
        .MODEL  SMALL
        .386
        .STACK
        .DATA
        .CODE
MAIN    PROC    FAR
        .STARTUP
        MOV     EBX,0FFFFFFFFH; (1)
        MOV     EAX,0EEEEEEEEH; (2)
       .EXIT
MAIN    ENDP
END
Run Code Online (Sandbox Code Playgroud)

我对EBX寄存器的行为感到困惑。在(1)指令之后,EBX设置为1-s:

在此处输入图片说明

执行(2)指令不仅会将值加载到EAX中,而且在EBX的上半部分也为零:

在此处输入图片说明

为什么实际上会发生?

x86 assembly masm code-view x86-16

5
推荐指数
1
解决办法
60
查看次数

C 中未知的函数签名

如果您能向我解释以下含义,我将非常感激:

void bar(char *a, char *b, unsigned short c)      // (2)
{
    ...
}

void (*foo(void))(char *, char *, unsigned short) // (1)
{
    return bar;
}

Run Code Online (Sandbox Code Playgroud)

尤其,

  • 为什么(1)中没有变量名?
  • 这是什么void (*foo(void))意思?怎么可以*foo(void)是名字呢?
  • 这是什么return bar意思?返回bar源代码的地址,或者 的结果bar,或者其他?
  • 是不是有什么特点让这些签名变得如此复杂呢?
  • 您能举个用法示例吗?

c pointers

3
推荐指数
1
解决办法
311
查看次数

标签 统计

assembly ×1

c ×1

code-view ×1

masm ×1

pointers ×1

x86 ×1

x86-16 ×1