作者在 2010-07-02 23:04:03 发布以下内容
汇编一
void func()
{
goto C_Dest; /* 合法 */
//goto c_dest; /* 错误 */
goto A_Dest; /* 合法 */
goto a_dest; /* 合法 */
__asm
{
JMP C_Dest ; 合法
;JMP c_dest ; MSDN上说合法,但是我在VS.NET中编译,认为这样不合法
JMP A_Dest ; 合法
JMP a_dest ; 合法
a_dest: ; __asm 标号
}
C_Dest: /* C的标号 */
return;
}
int main()
{
func();
return 0;
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
汇编2
#include <stdio.h>
char szformat[] = "%s %s\n" ;
char szHello[] = "Hello" ;
char szWorld[] = "world" ;
void main()
{
__asm
{
MOV EAX,OFFSET szWorld
PUSH EAX
MOV EAX,OFFSET szHello
PUSH EAX
MOV EAX,OFFSET szformat
PUSH EAX
CALL printf
; 内联汇编调用C函数必须自己清除堆栈
; 用不使用的EBX寄存器清除堆栈,或ADD ESP, 12
POP EBX
POP EBX
POP EBX
}
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;、
汇编3
#include<windows.h>
const char szAppName[] = "API Test" ;
MyProc proc
push ebp
mov ebp,esp
sub esp,8
mov eax,dword ptr[ebp+8]
sub eax,dword ptr[ebp+c]
add esp,8
pop ebp
ret 8
MyProc endp
void main()
{
char szHello[]="Hello, world!" ;
__asm
{
PUSH MB_OK OR MB_ICONINFORMATION
PUSH OFFSET szAppName ; 全局变量用 OFFSET
LEA EAX,szHello ; 局部变量用 LEA
PUSH EAX
PUSH 0
CALL DWORD PTR[MessageBoxA]; 注意这里,我费了好大周折才发现不是CALL MessageBoxA
}
MyProc
}
void func()
{
goto C_Dest; /* 合法 */
//goto c_dest; /* 错误 */
goto A_Dest; /* 合法 */
goto a_dest; /* 合法 */
__asm
{
JMP C_Dest ; 合法
;JMP c_dest ; MSDN上说合法,但是我在VS.NET中编译,认为这样不合法
JMP A_Dest ; 合法
JMP a_dest ; 合法
a_dest: ; __asm 标号
}
C_Dest: /* C的标号 */
return;
}
int main()
{
func();
return 0;
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
汇编2
#include <stdio.h>
char szformat[] = "%s %s\n" ;
char szHello[] = "Hello" ;
char szWorld[] = "world" ;
void main()
{
__asm
{
MOV EAX,OFFSET szWorld
PUSH EAX
MOV EAX,OFFSET szHello
PUSH EAX
MOV EAX,OFFSET szformat
PUSH EAX
CALL printf
; 内联汇编调用C函数必须自己清除堆栈
; 用不使用的EBX寄存器清除堆栈,或ADD ESP, 12
POP EBX
POP EBX
POP EBX
}
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;、
汇编3
#include<windows.h>
const char szAppName[] = "API Test" ;
MyProc proc
push ebp
mov ebp,esp
sub esp,8
mov eax,dword ptr[ebp+8]
sub eax,dword ptr[ebp+c]
add esp,8
pop ebp
ret 8
MyProc endp
void main()
{
char szHello[]="Hello, world!" ;
__asm
{
PUSH MB_OK OR MB_ICONINFORMATION
PUSH OFFSET szAppName ; 全局变量用 OFFSET
LEA EAX,szHello ; 局部变量用 LEA
PUSH EAX
PUSH 0
CALL DWORD PTR[MessageBoxA]; 注意这里,我费了好大周折才发现不是CALL MessageBoxA
}
MyProc
}