Win32和汇编接口问题
来源:互联网 发布:算法刘汝佳电子式 编辑:程序博客网 时间:2024/05/16 04:54
来说下win32和汇编的接口问题吧。Win32程序是以WinMain()开始的,而C是以main开始的,但是Win32真的必须一定要以WinMain开始么?其实不是。之所以以WinMain开始,是因为编译器内定了WinMain作为被调函数名,然后在WinMain前面,会生成一段asm代码,去调用WinMain 从而开始整个程序。
知道了原理,我们来试试。偶用的工具和平台如下:
Win2000 Prefossonl Sp4 VC6.0 汇编方面是Masm32 V8.2。
开始前说下原理,在VC环境下,建立个Win32App工程,删除系统生成的WinMain,这个时候直接编译,系统Link时会出错,因为VC编译器内定的程序起始点是WinMain ,所以当你没有写这个函数时,系统就会找不到入口点,这样程序就不知道要从哪里开始,这样link时就会报错。 我们要做的就是自己写一个asm文件,来自己定义一个程序入口,然后用C实现这个入口就可以了。从接口上抽象来说,就是汇编调用C函数。下面看代码:
===用来定义程序入口的asm========================================================
.586
.model flat
.data
copyright db "Hello World!"
.code
extern C xmain: near ;声明程序入口点
extern C Exit: near ;声明程序出口点
extern C TerminateProcess@8: near ;Win32API 可以在这里调用,也可以在C的实现函数里调用
extern C GetCurrentProcess@0: near ;Win32API 可以在这里调用,也可以在C的实现函数里调用
public STARTCODE
STARTCODE PROC NEAR C
call xmain
call Exit
; push eax
; call GetCurrentProcess@0
;push eax
;call TerminateProcess@8
STARTCODE ENDP
END STARTCODE
=================================================================================
上面这个asm代码,定义了程序入口为xmain,出口为exit 下面要做的就是用C来实现这2个函数,并且把他们的obj文件link起来就可以了。
=========main.c===================================================================
#include <Windows.h>
int xmain(void)
{
return 0;
}
void Exit(int ExitCode)
{
TerminateProcess(GetCurrentProcess(),ExitCode);
}
================================================================================
这段程序用来实现入口和出口函数。现在先用Masm将asm文件编译,得到obj文件。再将obj文件加入VC6的
Win32App工程,编译这个工程,link。就可以了,然后你可以用单步调试的方法看看,记得打开asm反汇编。
asm代码如何和C接口的。
- Win32和汇编接口问题
- dos汇编 和 win32汇编
- Win32汇编教程之一:Win32汇编的环境和基础
- 罗云彬win32汇编教程笔记 Win32汇编的标号和 @@
- WIN32汇编显示乱码问题 WSPRINTF
- WIN32汇编产生的小问题总结
- Win32 汇编
- Win32汇编的环境和基础
- 学习win32汇编指令:lea和offset
- 关于win32汇编学习心得和计划
- win32汇编 invoke 和 call区别
- win32汇编 INVOKE 和 call区别
- Win32汇编教程二 Win32汇编程序的结构和语法
- Win32汇编教程二:Win32汇编程序的结构和语法
- win32汇编和8086汇编的一点区别
- win32汇编和8086汇编的一点区别
- Win32汇编开发环境介绍和RadAsm简明教程
- Win32汇编开发环境介绍和RadAsm简明教程
- (中文版)How To Ask Questions The Smart Way(转载)
- SQL注入漏洞全接触(转)
- 我的Blog即时更新
- 容易让人产生怀疑的正常进程
- 打捞者
- Win32和汇编接口问题
- 最后一门考试结束了
- Hashtable和HashMap对象
- PC-LINT配置使用说明
- 项目开发:电话留言软件(20050717)
- 企业级服务器设计与实现经验之插件系统基础篇
- Windows 控件限制用户输入的基本法门(.NET 篇) 【摘录自FlashELF's blog】
- 各种网页媒体播放器代码及详解
- 冬瓜汤汆丸子