动态链接库(一)

动态链接库全面浅析(一)-----Win32 动态链接库 言前:由于最近复习了下动态链接库,所以决定写一个动态链接库专题。动态链接库网上各种达人已近写过很多了,资料也是一大把一大把的。但是我还是想写一份,因为网上讲的都很分散,讲的不是很系统,而且很多问题没有深究。因此我自己还是写一份吧,因为说明了是浅析。所以说我不可能讲的太深入,但是本 阅读详情

    一  概述 

     DLL实际上是一组源代码模块,提供一些供其他DLL或应用程序调用的函数。在使用DLL之前,必须将DLL映像文件映射到调用进程的相对应的地址空间,有两种载入方法:隐式链接和显示链接。

     隐式链接在进程创建的时候载入,一个新创建的进程只有在将可执行模块和所有的DLL模块隐射到进程的地址 空间后进程的主线程才开始执行,可以通过#pragram comment(lib, "动态链接库名.lib")或者link选项卡的Category:input 中添加(对于VC6.0编译器)。

     显示链接在需要时载入,通过调用API函数LoadLibrary,LoadLibraryEx,GetProcAddress,FreeLibrary.

     在DLL被映射到进程的地址空间后,对于进程中的线程而言,该DLL中的代码和数据就像是一些附加的代码和数据碰巧被放在进程的地址空间中。DLL中的函数创建的任何对象都为调用线程或进程所拥有。

     注意:DLL 中函数动态分配的内存块由于进程中各个模块链接到c/c++运行库的DLL版本可能不同最好有DLL提供函数在内部释放。

    1.1 对于一个DLL工程,当编译链接通完成后,将生成一个LIB文件和一个DLL文件,LIB文件包含导出的函数和变量的符号名,DLL文件包含实际的函数和数据。隐式链接需要LIB文件,DLL文件,H头文件,而显示链接 只需要DLL文件就可以了。

    1.2 一个DLL可以导出变量,函数,c++类。在实际开发中应该避免导出变量。对于c++类的导出只有在用同一家厂商提供的编译器的时候才可以。

    1.3

#define MYLIBAPI extern "C" _declspec(dllimport)

#define MYLIBAPI extern "C" _declspec(dllexport) ;

extern "C" 用来告诉编译器不要对导出的变量或函数名进行改编。在导入符号时不必使用_declspec(dllimport)但这可以是编译器提前知道我们的引用的符号来自DLL可以产生略微高效的代码。

 

通过DEF文件导出:

   EXPORTS

          dllGlobalVar CONSTANT

           MYFunc

如果DLL包含的符号未经过改编,链接到_MyFunc@8时连接器会做出正确的选择。

 

#pragma comment(linker, "export:MyFunc = _MyFunc@8")实际上两个函数都被导出。

注意:ordinal 指定序号为了与16位的windows代码保持向后兼容而保留的现在的程序不应该在使用。

 

MSDN:

 

EXPORTS definitions

This statement makes one or more definitions available as exports to other programs.

EXPORTS marks the beginning of a list of export definitions. Each definition must be on a separate line. The EXPORTS keyword can be on the same line as the first definition or on a preceding line. The .DEF file can contain one or more EXPORTS statements.

The syntax for an export definition is:

entryname[=internalname] [@ordinal[NONAME]] [DATA] [PRIVATE]

The optional keyword PRIVATE prevents entryname from being placed in the import library generated by LINK. It has no effect on the export in the image also generated by LINK.

There are three methods for exporting a definition, listed in recommended order of use:

  1. The __declspec(dllexport) keyword in the source code
  2. An EXPORTS statement in a .DEF file
  3. An /EXPORT specification in a LINK command

All three methods can be used in the same program. When LINK builds a program that contains exports, it also creates an import library, unless an .EXP file is used in the build.

 

 1.4 DLL的搜索路径:

       (1) 包含可执行文件的目录。

       (2)Windows的系统目录(GetSystemDirectory)。

       (3)16位的系统目录(windows目录中的system子目录)。

       (4)windows目录(GetWindowDirectory)。

       (5)进程的当前目录。

       (6)PATH环境变量中所列出的目录。

注意:从xp sp2后(1)搜索位于windows目录之后。可以改变这个顺序通过修改注册表HKLM/SYSTEM/CurrentControlSet/Control/Session Manager注册项的一个DWORD值。

        

 

日行一PWN babyrop 动态链接库的使用 ​ 我们在之前的机器中,通常就是利用一段程序中代码段下已有的指令来实现我们得到flag或者拿下shell的目的。但是抛出了一个问题,如果程序中没有危险语句,就无从下手。 ​ 所以,此次我们引出了一个概念,动态链接库libc。这也解决了我一直以来的问题,为什么call的函数点进去只能看到return,因为声明的函数并不在代码的cs段内,而是应用了随机化存储,存在内存的其他地方了。 ​ 之后通过某些方法调用,这个某些方法这事以后的事情了。闲话少叙,我们开始今天的日行一pwn。 开始 例行检查,开启了 阅读详情

相关推荐

Jetson AGX Orin 新手避坑:解决‘找不到nvidia-jetpack包’的完整修复指南

本文详细介绍了Jetson AGX Orin设备在安装JetPack开发套件时遇到的'nvidia-jetpack包缺失'问题的完整解决方案。通过分析问题根源、提供分步修复指南以及系统优化建议,帮助开发者快速解决这一常见问题,充分发挥Jetson AGX Orin的边缘计算性能。

weixin_42520909的博客 460

DLL动态链接库的工作原理

转载地址:http://blog.youkuaiyun.com/woshinia/article/details/7919281#comments "动态链接"这几字指明了DLLs是如何工作的。对于常规的函数库,链接器从中拷贝它需要的所有库函数,并把确切的函数地址传送给调用这些函数的程序。而对于DLLs,函数储存在一个独立的动态链接库文件中。在创建Windows程序时,链接过程并不把DLLs文件链接到程

记录每一个小阶段的学习心得,持之以恒! 5351

拯救我的老平板三星note8.0 table(GT-N5110)升级到lineage os-14.1(android7.1)全记录

买了多年的三星平板note8.0已经闲置了一段时间,今天在家不能出门,也没啥事,就把它拿出来刷新系统。不成想居然搞了一天,还差点变成了砖。 原版的系统是安卓4.0的系统,很多软件已经不能用了,微信、优酷都不支持,而且三星也不提供更新升级,于是寻求第三方解决方案。折腾过程一波三折,就不赘述了,我就讲一下正确的操作过程吧。 切记我这里讲的过程只针对三星note8.0 table,国行版本,版本号是...

weixin_41108814的博客 2万+

#pragma 预处理指令详解

#pragma  预处理指令详解              在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。      其格式一般为: #p

jx_kingwei的专栏 4万+

从理论到板级:FOC电机驱动硬件电路全链路设计解析

本文从硬件工程师视角,深度解析FOC电机驱动从理论到板级实现的全链路设计。重点剖析了电源保护、核心采样电路、三相逆变桥与驱动电路等关键硬件模块的设计要点与实战经验,强调硬件是FOC算法可靠运行的基石,并提供了PCB布局布线的核心原则,帮助开发者构建高性能、高可靠性的电机驱动硬件平台。

weixin_29240711的博客 332

手把手教你用微信小程序实现智能硬件音视频通话(含Linux/RTOS适配)

本文详细介绍了如何利用微信小程序硬件框架(WMPF)和音视频SDK,在智能硬件(包括Linux与RTOS设备)上实现音视频通话功能。文章从架构设计、设备端SDK集成、小程序VOIP插件开发到跨平台调试与性能优化,提供了全链路实战指南,帮助开发者打通微信小程序与嵌入式设备间的实时音视频通信。

ooo22的博客 328

动态链接库的创建以及两种调用方式

创建动态连接库 vs2010创建项目 控制台项目 选择动态链接库 项目属性-配置属性-常规: 配置类型  动态库dll             MFC的使用 在共享Dll中使用MFC 项目属性- C/C++代码生成-运行库:  多线程调试 DLL/(MDd) 创建函数的头文件:testdll.h int add(int a,int b); 创建函数的定义文件testdll.c

gacmy的专栏 727

WOFOST模型参数调优实战:从‘跑不通’到‘预测准’的避坑指南

本文详细介绍了WOFOST模型参数调优的实战技巧,帮助用户从模型报错诊断到参数敏感性分析,再到土壤-作物参数联调策略,逐步解决‘跑不通’到‘预测准’的问题。通过Python和PCSE工具,提供参数扰动测试模板和关键参数优先级矩阵,助力作物模型的高效校准与预测。

weixin_32597009的博客 621

动态链接库详解【一】

一、分别编译与链接(Linking) 大多数高级语言都支持分别编译,程序员可以显式地把程序划分为独立的模块或文件,然后每个独立部分分别编译。在编译之后,由链接器把这些独立的片段(称为编译单元)“粘接到一起”。(想想这样做有什么好处?) 在C/C++中,这些独立的编译单元包括obj文件(一般的源程序编译而成)、lib文件(静态链接的函数库)、dll文件(动态链接的函数库)等。 静态链接方式:在

一步一脚印 1万+

WinForm制作文件传输助手,Tcp局域网传输文件,传输速度受限于宽带和硬盘速度上限

文件传输助手为什么会出现,是因为项目上有些特殊的地方限制太多了,连插硬盘都需要关软件,联网又要开很不方便,网络限制一般软件只能局域网通信,还要开特定的端口等,你才能在电脑上通信,这样和机房的服务器远程的时候文件就不好拿过去,又不可能每次都去开机房的门。现在这个功能比较简单,只能单文件发送,但是其实比U盘硬盘方便,一般的六类网线传输压缩包在50M/s以上,U盘硬盘复制就不行了,特别如果是像我们学校这种网络结构,一个学校都在一个局域网,那真的方便!普通的局域网用特定IP和端口,通信也是很方便的。

m0_69233031的博客 1670

软解调详解

在这个示例中,生成了一个随机的比特序列,将其调制为QPSK信号,添加了高斯白噪声,然后计算了每个比特的LLR,并根据LLR的符号进行了解调判决。软解调是一种基于接收信号的概率估计进行解调的方法。与传统的硬解调相比,软解调不仅考虑了接收信号的幅度和相位信息,还利用统计特性计算每个比特为0或1的概率,从而提高了解调性能。软解调过程中涉及的主要公式包括对数似然比(LLR)的计算公式、信号的概率分布函数以及解调判决公式等。软解调的计算处理流程包括信号接收、预处理、相位估计、LLR计算、解调判决和输出等步骤。

ahah12345678的博客 1225

动态链接库(一)--动态链接库简介

动态链接库简介

SNAKEpc12138的博客 8553

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【动态链接库】一、VS下基本制作与使用

在vs中制作与使用c++动态库

优快云_RTKLIB的博客 479

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

VC++动态链接库编程总结一

转自:VC++动态链接库编程总结一2008-04-09 13:24:34|分类:编程语言 |标签: |字号大中小可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。静态链接库与动态链接库都是共享代码的方式,如https://www.pinlue.com/article/2020/03/1220/2110021802919.html ...

icontent 217

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

(一)动态链接库基础

动态链接库独立于可执行文件之外,用于存储函数、资源等内容,减小了exe文件的大小。后缀名为.exe。 一、新建项目生成DLL (一)新建项目 选择win32控制台程序–》选择dll–》不选择预编译头等 1.添加头文件first_dll.h   头文件声明要输出的函数名称,添加如下代码: #pragma once extern "C" _declspec(dllexport) int sum(int a,int b);// (1)   注释:   (1)采用C的语法为函数的导出声明 2.添

树洞 337

一文学会LabVIEW调用动态链接库DLL生成VI

大家都知道,LabVIEW在做大型项目的时候,我们不可能把所有的函数全部展示在主VI中,所以肯定会使用到子VI,子VI的有两种,一种是直接使用LabVIEW中的函数生成功能的VI,还有一种方式就是调用动态链接库DLL生成相应功能的VI,今天给大家介绍一下调用动态链接库DLL生成VI。本笔记为笔者在项目中记录,为方便之后查看,同时也希望能帮助有需要的朋友。

weixin_43911004的博客 6828

动态链接库基础学习一

使用VC6.0创建一个空的动态链接库工程,建立一个空的文件,添加源文件编写一个函数如:int add (int a, int b){     return a+b;}int subtract (int a, int b){     return a-b;}这时,我们可以用VC6.0自带的工具dumpbin工具来查看此动态链接库导出的函数当我们在cmd窗口

renwotao2009的专栏 3280

动态链接库(一)

一.typedef函数指针用法  1.简单的函数指针的应用 形式1:返回类型(*函数名)(参数表)  char (*pFun)(int);    char glFun(int a){ return;}    void main()    {        pFun = glFun;        (*pFun)(2);    }   2.使用typedef更直观更方便

Greless的后花园 544

java调用动态链接库_Java调用本地代码(一)—— 创建动态链接库

近期项目需要使用Java调用本地一个很老的C写的库,就顺便研究了下Java调用本地代码的一些方法。整理一下出一个小系列。主要就是介绍两种不同的方法:JNI和JNA。作为第一篇,我们先动手用C写个简单的动态链接库,为后面的文章做准备。什么是动态链接库先做个基础的普及。C/C++编译出来的库有两种:静态链接库和动态链接库。静态库后缀名在Windows上是.lib,Unix/Linux上是.a。当你的程...

weixin_42490217的博客 1069

专题:Windows动态链接库(一)

 在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库。现在就让我们走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧!初窥门径:Windows的基石随便打开一个系统目录,一眼望去就能看到很多扩展名DLL的文件,这些就是经常说的“动态链接库”,DLL是Dynamic Link Library(即“动态链接库”)的缩写。从Microsoft公司推出首个版本的Wi

emutime的专栏 654

VC++动态链接库(DLL)编程(一)

VC++动态链接库(DLL)编程(一) ――理解库 作者:宋宝华  e-mail:21cnbao@21cn.com 1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。静态链接库与动态链接库都是共享代码的方

todototry的专栏 2750

动态链接库(DLL)(一)

最近的项目中被甲方爸爸提出使用动态链接库将程序封装起来,所以系统的学习了一下相关知识。 动态链接库 动态链接库(Dynamic Link Library, DLL)是一个包含了可由多个程序同时使用的代码和数据的库,它使进程可以调用不属于自己可执行代码的函数。一个动态链接库只有在另外一个模块调用它包含的函数时才被启动。 目的:实现代码和数据的共享,提高程序的复用性。 下面通过一个小例子介绍动态链接库...

weixin_43936250的博客 276
上一篇: 创建浏览对话框
下一篇: 在VC中编译、运行程序的小知识点
SWenJing
博客等级 码龄18年 8粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值