模拟DLL加载
#include <stdio.h>
#include <malloc.h>
#include <sys/stat.h>
typedef int (*PFUNC)(int,int);
typedef struct
{
int Position;
int Length;
}Fun; typedef struct
{
int num;
Fun *pFun;
}Lib; int main()
{ int FileSize =;
char FileName[] = "code.obj";
FILE * FileHandle = fopen(FileName,"rb");
if(FileHandle!=NULL)
{
Lib lib;
fread(&lib.num,sizeof(char),,FileHandle);
//确定文件中有几个函数
lib.pFun =(Fun*)malloc(sizeof(Fun)*lib.num);
fread(lib.pFun,sizeof(Fun),lib.num,FileHandle);
//读取文件中第一个函数的信息,(在文件中的)地址和长度
char *instruction= (char*)malloc(sizeof(char)*lib.pFun->Length);
//根据函数在内存中为函数分配空间
fseek(FileHandle,lib.pFun->Position,);
//移动至函数地址,以字节为单位,0代表文件第一个字节
fread(instruction,sizeof(char),lib.pFun->Length,FileHandle);
//读取函数指令到预留内存
PFUNC pfunc = (PFUNC)instruction;
printf("%d \n",pfunc(,));
//执行函数
}
} /*
说明:
1)没有附带函数类型信息,如果支持函数类型信息,那么可以说这就是DLL文件
2)读取文件时可以把文件想象成一个char A[m],有一个char的指针指向到这个
数组,并在这个数组中前后移动,初始指到A[0],我们总是从这个指针指向的
地址向后读取一定的字节复制到另一个数组,假设指针指向A[0],我们要读取
10个字节,读取完之后,指针定位到A[10],当然,我们也可以借助fseek任意的
移动指针
size_t fread(void *buffer,size_t size,size_t count,FILE *stream)
{
int i=0;
while(stream->ptr!=NULL && i<count)
{
buffer = stream->ptr;
(stream->ptr)++;
}
return i;
} // 假想的函数代码 int fseek( FILE *stream,long offset,int origin)
{
stream->ptr = offset + origin
}
*/
CODE.OBJ
01 00 00 00 0C 00 00 00 2B 00 00 00 55 8B EC 81
EC C0 00 00 00 53 56 57 8D BD 40 FF FF FF B9 30
00 00 00 B8 CC CC CC CC F3 AB 8B 45 08 03 45 0C
5F 5E 5B 8B E5 5D C3
模拟DLL加载的更多相关文章
- System.load(PWConnector.dll)加载异常 Can't find dependent libraries
System.load(PWConnector.dll)加载异常 Can't find dependent libraries 错误信息:D:\PWAdapter\PWConnector.dll: C ...
- 如何解决SoftekBarcode.dll加载失败的问题
本文转自:慧都控件网 Softek Barcode Reader Toolkit是专门从事于条形码读取技术的软件公司Softek旗下一款著名的条码读取工具包.最近有部分用户反映在运行此工具包时会遇到“ ...
- ACCESS DLL加载错误
如今还在用ACCESS 2003,太懒没办法,升到2010变化太大了,做个Access的转版挺麻烦的.况且大家都在使用2003,也就懒得搞了. 但问题是office 2003已经out了,(Offic ...
- 模块“XXX.dll”加载失败
具体问题:模块“XXX.dll”加载失败 请确保该二进制存储在指定的路径中,或者调试它以检查该二进制或相关的.DLL文件是否有问题 找不到指定的模块. 1.在安装C++软件的时候,有时候安装失败提示 ...
- DLL加载,设置相对路径
DLL加载,设置相对路径 1. 加载dll方法之一:(./ 代表当前目录,../ 代表上层目录)包含头文件的相对路径(当前路径为源代码路径,路径 “../../” 当前项目文件夹上级目录),链接lib ...
- 禁用ngen版本的.NET Framework dll加载
在调试时会发现出于性能考虑.NET Framework dll加载的都是ngen版本,比如:System.dll,实际加载System.ni.dll. 如果希望加载非ngen版本,可以设置系统环境变量 ...
- 未能从程序集 C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Data.Entity.Build.Tasks.dll 加载任务“EntityClean”
问题: 未能从程序集 C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Data.Entity.Build.Tasks.dll 加载任务“Entity ...
- 利用dll加载漏洞实现远程代码执行
微软的“不安全dll加载”漏洞涉及Windows XP至Windows 7等多个版本的操作系统.由于Windows存在加载未指明完整路径的dll文件的机制,可能导致用户在使用第三方软件.玩游戏.听音乐 ...
- HTTP 筛选器 DLL C:\Windows\Microsoft.Net\Framework\v4.0.30319\aspnet_filter.dll 加载失败。数据是错误。
今天在一台win2003的云主机上,安装.net 4.0时,所有的网站都打不开了.打开事件查看器,发现以下错误: HTTP 筛选器 DLL C:\Windows\Microsoft.Net\Frame ...
随机推荐
- Android-Opencv开发(一)配置环境
先去官网下载android-opencv http://opencv.org/.
- lambda expand in list
[(lambda x: x*x)(x) for x in range(10)] Or better yet: [x*x for x in range(10)]
- 关于RSS
RSS(简易信息聚合)是一种消息来源格式规范,用以聚合经常发布更新数据的网站,例如博客文章.新闻.音频或视频的网摘.RSS文件(或称做摘要.网络摘要.或频更新,提供到频道)包含了全文或是节录的文字,再 ...
- (译文)12个简单(但强大)的JavaScript技巧(一)
原文连接: 12 Simple (Yet Powerful) JavaScript Tips 我将会介绍和解析12个简单但是强大的JavaScript技巧. 这些技巧所有的JavaScript程序员都 ...
- shell小程序
因此需要挑选学生,因此需要一个抓阄的程序:要求:1.执行脚本后,想去的同学输入英文名字全拼,产生随机数01-99之间的数字,数字越大就去参加项目实践,前面已经抓到的数字,下次不能在出现相同数字.2.第 ...
- Git版本管理:Windows下Git配置与使用指南 Gitlab
简要介绍:Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. 一.安装 软件:msysGit-fullinstall-1.8.1.2 打开之后设置安装路径,默认为 ...
- ### 学习《C++ Primer》- 6
Part 6: 拷贝控制(第13章) // @author: gr // @date: 2015-01-08 // @email: forgerui@gmail.com 一.拷贝.赋值与销毁 拷贝构造 ...
- iOS获取webview高度
int webHeight = [[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scr ...
- 关于懒加载(lazy loading)
懒加载---即为延迟加载,顾名思义在需要的时候才加载,这样做效率会比较低,但是占用内存低,iOS设备内存资源有限,如果程序启动使用一次性加载的方式可能会耗尽内存,这时可以使用懒加载,先判断是否有,没有 ...
- windows server 2003 负载平衡的详细设置步骤(转载)
声明:本文为转载. 当把一台服务器(包括Web服务器.FTP服务器或者流媒体服务器等等)放入网络中之后,随着客户端数量的不断增加,人们往往需要功能更强大.处理速度更快的服务器.为了解决这个问题,如果将 ...