汇编与C混合编程

      打算用C语言写加壳程序,由于外壳部分(shell)必须用汇编写,所以就来混合编程一把。为后面做准备。开始进入正题。

首先下面是汇编代码。分别导出(函数,变量,标签)。

;author:zhujian198
;
email:zhujian198@gmail.com
;
date:2009/3/28

.
586
.model flat,stdcall
option 
casemap:none
include WINDOWS.
INC
;export function declare
proAdd proto :DWORD,:DWORD

;export variable
public Number

;export Lable address
public L1

.data
Number dd 
34

.code
;prepare export this function
proAdd proc a:DWORD,b:DWORD
    L1  LABEL    DWORD    
    
xor eax,eax
    
add eax,a
    
add eax,b
    
ret
proAdd endp
end

 编译汇编代码为obj文件

 命令行:ML /c /coff MyTest.asm

 

 现在写个C程序来调用下。

#include <stdio.h>

extern "C" int __stdcall proAdd(int a,int b);

extern "C" int Number;
extern "C" int L1;

int main(int argc, char* argv[])
{
    
int nRes = proAdd(3,4);
    printf(
"Call Assembly function %d\n",nRes);
    
int n = Number;
    printf(
"Assembly Variable value is %d\n",n);
    
int lable = L1;
    printf(
"Assembly LABLE %d\n",lable);
    
return 0;
}

 

运行结果:

 

 

 

 

posted @ 2009-03-28 20:36  debugzhu  阅读(644)  评论(0编辑  收藏  举报