6.%lu-%lx是什么意思?
C语言输出不同类型的整数,需要使用不用的格式限定符
输出 unsigned int 类型的整数,要用 %u 。输出 long ,要用 %ld;如果要以十六进制或者八进制形式输出,那就用 %lx(或者%lX)或者 %lo。注意:虽然整数常量的后缀使用大写或者小写英文字母都没关系,但是它们格式限定符必须使用小写!如果我们要输出 short 类型的整数,可以在 %d 中间加上前缀 h,也就是%hd;同理,%ho 和 %hx(或者 %hX )分别表示以八进制或十六进制形式输出。前缀 h 和 l 可以和 u 组合,表示输出无符号整数。例如:%lu 表示输出 unsigned long 类型的整数;%hu 表示输出unsigned short类型的整数。如果您的编译器支持C99,可以使用 %lld 和 %llu 分别表示输出 long long 和 unsigned long long 。
所以是长无符号型 十六进制长整型
摘自aeeK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3y4H3M7q4)9J5k6h3N6S2i4K6u0V1L8r3q4Q4x3X3g2U0L8$3#2Q4x3V1k6Z5N6r3#2D9i4K6u0r3x3g2)9J5c8U0u0Q4x3V1j5H3y4e0p5H3i4K6u0r3x3U0N6Q4x3X3g2Z5N6r3@1`.
;======================================================================================================
可以看出在调用<jmp.&USER32.MessageBoxA>之前有压栈动作,也就是通过堆栈传递参数。(本人不会win32汇编,悟出这一点,让行家见笑了)
我找到了一本win32api详解(cb3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4m8W2k6r3W2&6i4K6u0W2j5$3!0E0i4K6u0r3c8r3!0U0N6h3#2W2L8Y4c8Q4x3X3g2Z5N6r3#2Q4c8e0g2Q4z5p5k6Q4b7f1k6Q4c8e0c8Q4b7U0S2Q4z5p5u0Q4c8e0S2Q4b7V1c8Q4b7V1c8Q4c8f1k6Q4b7V1y4Q4z5o6W2Q4c8e0y4Q4z5o6m8Q4z5o6u0Q4c8e0c8Q4b7U0S2Q4z5p5q4Q4c8e0W2Q4z5f1c8Q4b7e0u0Q4c8e0k6Q4z5e0S2Q4b7f1k6Q4c8e0S2Q4b7V1k6Q4z5e0W2Q4c8e0k6Q4b7e0m8Q4b7U0N6Q4c8e0S2Q4b7f1g2Q4b7U0u0Q4c8e0N6Q4z5f1q4Q4z5o6b7`.
int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);
所以参数是倒着压栈的。