通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 红客教程 >> 网络编程 >> 文章正文
Perl中内嵌C代码
责任编辑:酷酷の鱼   更新日期:2007-12-22
 

By:云舒
2007-12-21
Blog: http://www.icylife.net

这个又是一篇好玩的文章,前几天回家看爸爸妈妈,在火车上闲得没事,翻看perl的文档,练练英语,也仔细读读perl的一些东西。插一句老话,不是语言不行,而是人不行,努力去学,所有的语言都有适合的领域,都有生存的空间。

以前有些应用中perl的速度比较慢,但是如果和c结合起来,就可以解决这样的问题了。perl和c结合有三种办法,第一是用c来写xs制作perl模块,再在perl代码中加载,这个比较简单,CU和IBM都有文档看,我就不写了。第二是在C中嵌入perl脚本,这个对我来说没什么用,我还没看。第三就是本文要说的,在Perl中嵌入C代码了。实现起来简单方便,唯一的要求是运行perl脚本的机器要有编译器,VC和GCC都行。直接看代码吧,然后再解释:
代码:

#!/usr/bin/perl

use warnings;
use strict;

use Inline C => <<'END_C';

#include <windows.h>

SV *MakeSV( char *name )
{
return newSVpvf( "I'm %s", name );
}

HV *MakeHash( char *key_name, char *value )
{
HV *my_hash = newHV( );

hv_store( my_hash, key_name, strlen(key_name), newSVpv( value, strlen(value) ), 0 );

return my_hash;
}

void AddKey( HV *my_hash, char *key_name, char *value )
{
hv_store( my_hash, key_name, strlen(key_name), newSVpv( value, strlen(value) ), 0 );
}

void MyBox( char *title, char *content )
{
MessageBox( NULL, content, title, MB_OKCANCEL );
}

END_C

print MakeSV( "yunshu\n" );

my %hash = %{ MakeHash( "first", "yunshu" ) };

$hash = "icy";

AddKey( \%hash, "third", "nmap" );
AddKey( \%hash, "end", "luoluo" );

foreach my $key( keys(%hash) )
{
print "$key\t->\t".$hash."\n";
}

MyBox( "test", "hello world" );

首先是use Inline C => <<'END_C';引入模块表示要嵌入C语言代码,并且指名END_C表示C代码结束。这里的C代码中,MakeSV函数我演示了如何将C 中的字符串返回给Perl成为标量;MakeHash函数,我演示了如何创建一个哈希表(HashTable),并保存了一个key和它的value,然后将这个哈希表返回给Perl使用;AddKey函数,我演示了如何在Perl中使用C中返回的哈希表,并用C代码添加一个元素;MyBox函数,我演示了如何调用windows的API函数。代码很简单,看看就明白了。

需要注意的是,当C代码中需要指针的时候,你必须在Perl中传递一个应用给C函数;当C中返回一个指针的时候,你需要使用%{ }将C中返回的HashTable指针(引用)转换成HashTable,转换数组则使用@{ }来进行。这里C代码中的一些函数,都是Perl提供的C API接口,详细的资料可以参考:http://perldoc.perl.org/perlguts.html,你安装perl的目录下面有离线版本。有什么意见,可以给我发mail。

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    固顶文章 爱国者安全网2007年度优秀版主评选
    普通文章 瑞星公司01月11日发布 每日计算机病毒及木马播报
    普通文章 破解博彩神助(专注彩票) V2.8.01
    推荐文章 推荐:跨站脚本执行漏洞代码的六点思路
    普通文章 Windows系统下的远程堆栈溢出 实战篇
    普通文章 Windows系统下的远程堆栈溢出 原理篇
    普通文章 MsSQLServer是如何加密口令的
    普通文章 浅谈国内的渗透评估过程
    普通文章 Dvbbs8.1 0DAY(通杀Access和mssql版本)
    普通文章 微软:我们的代码比赛门铁克更安全
    热门文章
    普通文章REAL蛀虫利用播放器漏洞下载恶意程序
    普通文章李彦宏:中国要在互联网领域逐渐超越美国
    普通文章马云:阿里巴巴的成功是一个生态链的成功
    普通文章Ingres用户认证非授权访问漏洞
    普通文章TCPreen FD_SET()函数远程栈溢出漏洞
    普通文章Winace UUE文件解压堆溢出漏洞
    普通文章Pclxav木马猎手第一代特征码引擎源代码
    普通文章IE收藏夹管理小精灵算法分析
    普通文章Extra Drive Pro算法分析历程
    普通文章雨过天晴自我注册
    精彩专题