首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【操作系统】动态链接库

在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.EXE文件)。...//提供给用户用的函数 //应用程序如果要访问某个DLL中的函数,那么函数必须是被导出的函数。...中导出C++类 动态链接库导出整个类和仅导出该类的某些成员函数在实现方式的区别:如果在声明该类时,指定了导出标志,那么该类中所有的函数都被导出,否则只有那些声明时指定了导出标志的类成员才会被导出。...C++编写的DLL,其缺点就是不能导出一个类的成员函数,只能用于导出全局函数这种情况。..._stdcall标准的调用约定 C/C++ MFC Delphi 用pacal 是从左至右的压栈方式。

81720
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C++】匿名对象 ③ ( 函数返回值为对象值时 匿名对象 的 拷贝构造函数 与 析构函数 调用情况分析 )

    , 以及不同的使用场景下 , 匿名对象 的 创建与销毁情况 ; C++ 编译器 发现 使用 匿名对象 时 , 会根据 匿名对象 的用法 , 决定对 匿名对象的 处理 ; 匿名对象单独使用 : 如果只是单纯的使用...赋值 , 此时 编译器 会将 匿名对象 的值赋值给 已存在的变量 , 并且立刻销毁该匿名对象 ; 2、拷贝构造函数回顾 在 【C++】拷贝构造函数调用时机 ① ( 使用一个对象初始化另外一个对象 |...将一个对象赋值给另外一个对象 ) 【C++】拷贝构造函数调用时机 ② ( 对象值作为函数参数 | 对象值作为函数返回值 ) 博客中 , 分析了 拷贝构造函数 的调用时机 ; " 拷贝构造函数 " 又称为...Student fun() { Student s1(18, 170); return s1; } 二、当函数返回值为对象时的情况分析 ---- 1、函数返回对象值时返回值为匿名对象 如果一个 函数的返回值...fun 函数中 , 函数返回对象值时 , 创建 要返回的 普通对象副本 , 也就是一个 匿名对象 ; 调用析构函数 : m_age = 12 这是 fun 函数执行完毕 , 在函数作用域中的 普通对象

    33720

    directui

    、C++Builder、E语言)    ◆ 支持所有标准控件的换肤    ◆ 支持皮肤对象的导出与导入    ◆ 支持Windows主题导入,让标准界面皮肤的制作简单快捷    ◆ 让客户端代码简洁明了...Skin++换肤的大致流程   1、应用程序启动,加载Skin++库;    2、执行Skin++加载皮肤文件API函数;    3、Skin++ 安装窗口过程等类型Hook,准备截获应用程序所有窗口的创建事件...API函数来进行;    9、控件销毁时,Skin++即对其进行反子类化,将Skin++换肤前的消息过程地址重新设成当前的消息过程;    10、控件所有的消息不再经过Skin++消息处理函数。...控件执行其默认的窗口消息处理函数;    11、应用程序退出,Skin++库被卸载,在卸载之前Skin++获得通知,Skin++便在内部执行Hook的反初始化与资源文件的清理。...4,5,6,7,8,2005,2006;    支持C++ Builder 各种版本:C++ Builder 4,5,6,2006;    支持E语言各种版本。

    2.2K60

    EmmyLua Attach Debugger浅析

    , emmy.tool.exe创建目标进程后直接执行后续的从3开始的步骤, 以及当EmmyLua的DebugSession结束时, 会一起结束目标进程外(此时的emmy.tool.exe不会在附加成功后退出..., 分析了老半天后, 发现问题是出在libpe.cpp中, peParseExportTable()的时候, 实际上应用程序输出的是导出函数的个数, 但连带着导出的字符串一起并入了最大导出个数中, 导致一些...Attach, 各种报错或者直接崩溃 其中有个错误刚好群友贴了, 借图用一下, 报错如下图所示: 这个问题查的时间相对久, 有点莫名奇妙, 最后还是从直接调试启动和附加启动的差异找到了一点线索:...问题4: 编辑器的Lua 调试支持 原本以为编辑器应该是顺理成章的支持了, 结果内网试了一下, 挂上去就崩溃, 最后发现是基于.net framework的EXE按照目前emmylua提供的机制, 不能正确的检测应用程序的...的错误处理函数退出后, 调用原来的Lua错误处理函数, 一般会将栈顶(-1位置)的变量当成字符串来处理, 因为栈顶并不是字符串, 会直接触发崩溃, 简单把报错的message push回栈顶, 程序即可正常工作了

    3.1K10

    恶意代码分析实战六:熊猫烧香病毒样本分析

    正常我们在分析一个未知恶意程序的时候,流程都是要先上传杀毒网看看。 用PEID进行查壳,显示未加壳,程序采用Delphi语言开发。 补充下Dephi开发的程序和C++开发的程序的一些区别。...区别: 1.Delphi在函数调用时参数的传递不完全用栈,主要用寄存器。 2.而C++程序函数调用前会使用push语句将参数入栈,然后再进行call。...导出表中分析出URLDownload函数,此函数多为下载者恶意程序。 弱口令内网135端口爆破 感染U盘 下载者功能 135弱口令爆破密码。 U盘感染字符串关键字。 恶意下载者函数。...它可以将符号表(Map)文件导出,便于我们在OD中载入符号表进行调试。 显示出了Delphi的符号,便于分析和调试。...第三个Call有创建随机数,然后调用线程函数运行sub_0040B76C。

    3.4K20

    c++DLL编程详解

    譬如Windows提供的系统 DLL(其中包括了Windows的API),在任何开发环境中都能被调用,不在乎其是Visual Basic、Visual C++还是Delphi。   ...: (1)DLL导出函数,可外部应用程序调用; (2)DLL内部函数,只能在DLL中自己使用。...静态调用:这个方式要与静态库的调用方式区别开,是由编译系统完成对DLL的加载和应用程序结束时DLL 的卸载。...当调用某DLL的应用程序结束时,若系统中还有其它程序使用该DLL,则Windows对DLL的应用记录减1,直到所有使用该DLL的程序都结束时才释放它。静态调用方式简单实用,但不如动态调用方式灵活。...DLL被加载和卸载时被调用,在单线程启动和终止时,DLLMain函数也被调用,ul_reason_for_call指明了被调用的原因。

    2.3K60

    Oracle 开放源代码项目

    数据库访问工具包 DbKit 是一种基于 GoF 设计模式的可扩展的 C++ 类库。它用于减轻开发可移植的数据库的难度。当前的支持包括 ODBC 和 OCCI(Oracle C++ 调用接口)。...Delphi 的 ORACLE 直接访问组件 用于从 Delphi 4、5、6、7 直接访问(没有 BDE)ORACLE 7.3/8/8i 服务器的 Delphi 组件。...TransferWare TransferWare 是用于 Oracle 领域的工具集:模式版本管理程序 TransVersion (tv)、从 Oracle PL/SQL 访问外界的外部过程调用 (epc...Oracle Direct Path Daemon Oracle Direct Path Daemon (odpd) 是一种实用程序,它通过 Oracle 调用接口 (OCI) 直接路径 API 将数据从普通文件转移到...ProDBA ProDBA 是用 Java 编写的跨平台 Oracle 开发/管理工具。包括功能强大的 SQL 编辑器和模式导航器。它可将动态查询导出到 web。

    3.1K80

    Lua调用C++时打印堆栈信息

    公司的手游项目,使用的是基于cocos2d-x绑lua的解决方案(参数quick-x的绑定),虽然使用了lua进行开发,更新很爽了,但是崩溃依然较为严重,从后台查看崩溃日志时,基本上只能靠“猜”来复现bug...更为郁闷的是很多时候并没有使用log输出,在崩溃日志里还无法查看大概在哪一步操作崩溃的… 后来在网上搜索了一下,受到一点启发,lua代码在执行的时候可随时调用debug.traceback()方法来获得调用栈的字符串信息...而c++导出方法给lua调用,是使用tolua++工具实现的,通过ant实现将多个pkg文件生成一个cpp文件。...所以只能在ant的build.xml配置中想办法了,好在ant本身就支持正则的任务“ReplaceRegExp”,在调用的方法前面添加打印堆栈的方法即可。...C++函数崩溃时,查看lua的调用栈信息 (特别适用于tolua++) cocos2d-x集成lua 导出 C/C++ API 给 Lua 使用 build.xml示例 Ant-Tasks

    2.9K20

    Android对so体积优化的探索与实践

    这里就涉及一个函数 ID 的问题:外部调用者给出需要调用的函数的 ID,而动态链接器(Linker)根据该 ID 查找目标函数的地址并告知外部调用者。...原因就在于需要使用带调试信息和符号表的 so 对崩溃调用栈进行还原。...删除了调试信息和符号表的 so 完全可以正常运行,但是当它发生崩溃时,只能保证获取到崩溃调用栈的每个栈帧的相应指令在 so 中的位置,不一定能获取到符号。...但是排查崩溃问题时,我们希望得知 so 崩溃在源码的哪个位置。带调试信息和符号表的 so 可以将崩溃调用栈的每个栈帧还原成其对应的源码文件名、文件行号、函数名等,大大方便了崩溃问题的排查。...编写 version_script.txt 时需要注意 C++ 等语言对符号的修饰,不能直接把函数名填写进去。

    2.7K31

    JNI设计实践之路

    而方案6一般应用在大型的分布式应用中。        JNI是一种包容极广的编程接口,允许我们从Java应用程序里调用本地化方法。...Java程序通过生成的DLL调用非Java程序 同时我们也可以通过JNI,将Java虚拟机直接嵌入到本地的应用程序中,步骤很简单,只需要在C/C++程序中以JNI API函数为媒介调用Java程序。...使用第二种方式产生的导出函数名会根据编译器发生变化,在有的情况下会发生找不到导出函数的问题(我们在java控制台程序中调用很正常,但把它移植到JSP页面时,就发生了该问题,JVM开始崩溃,百思不得其解,...如果调用JNI函数发生异常,不及时进行处理,再次调用其他JNI函数时,可能会使JVM崩溃(crash), 大多数JNI函数都具有此特性。...JNI数据结构的一个元素是指向由JVM生成的一个指针的数组;该数组的每个元素都是指向一个JNI函数的指针。可以从本地化方法的内部对JNI函数的调用。

    85230

    逆向工厂(一):从hello world开始

    JVM会分析Java应用程序的函数调用并且达到内部一些阀值后将这些函数编译为本地更高效的机器码,当执行中遇到这类函数,直接执行编译好的机器码,从而避免频繁翻译执行的耗时。...静态链接:链接器将函数的代码从其所在地(目标文件或静态链接库中)拷贝到最终的可执行程序中,整个过程在程序生成时完成。...在应用程序中最常出现的段有以下6种: 1、执行代码段,.text命名; 2、数据段,.data、.rdata 命名; 3、资源段,.rsrc命名; 4、导出表,.edata命名; 5、导入表,.idata...四、反汇编的多样性 现在大多数程序是利用高级语言如C,C++,Delphi等进行编写 ,然后再经过编译链接,生成可被计算机系统直接执行的文件。不同的操作系统,不同的编程语言,反汇编出的代码大相庭径。...C++以push指令将字符串压入栈中,而.net以ldstr指令将字符串压入栈中,调用打印函数结束后,.net反汇编代码直接以ret指令返回结束,而c++反汇编代码先平衡完栈,再执行retn指令返回结束

    2.6K80

    Python、Delphi 和 C++ 复制文件速度比较

    在我们的测试中,Python 的文件复制速度最慢,而 C++ 的文件复制速度最快。Delphi 的文件复制速度介于两者之间。...具体来说,在复制一个 100MB 的文件时,Python 的复制时间约为 5 秒,Delphi 的复制时间约为 3 秒,而 C++ 的复制时间仅为 1 秒。...这种方式在性能上不如使用 CopyFile(Ex) 函数。Delphi 和 C++ 都使用了 CopyFile(Ex) 函数,因此它们的复制速度更快。...Python 的 shutil 模块使用了一个 open/read/write 循环来复制文件,而 Delphi 和 C++ 都使用了 CopyFile(Ex) 函数。...因此,Delphi 和 C++ 的文件复制速度更快。如果需要很高的文件读写速度,C++ 是最佳选择。Delphi 也能提供较高的性能,并在某些应用中表现优异。

    11110

    测试人员代码分析5步法

    ,即对代码的整个框架影响较小,所以分析时不建议花费太多时间。...、资源使用完后未释放、函数返回值出错等; ③从代码实现结构出发,确定设计的接口是否合理、多线程流程是否恰当、架构是否清晰等。...第四步 确定模块间的接口 C++接口一般分为COM接口和LoadLibrary导出接口两类,其中LoadLibrary导出接口的使用方法又细分为两种: ①COM接口,CoCreateInstance的第四个参数就是接口的...IID,IID_后直接跟的就是接口类的名称; ②LoadLibrary导出接口,GetProcAddress的第二个参数就是接口函数:a.该接口函数直接被使用;查找该接口函数的定义,如下add是接口函数...UnderStand集成了代码编辑器、代码跟踪器和代码分析器,支持C/C++/C#, Ada, Java, FORTRAN, Delphi和Jovial等语言,并且具有强大的界面,能将分析结果以图表、图形等形式呈现给大家

    1.4K100

    Java 性能调优工具

    大家好,又见面了,我是你们的朋友全栈君。 CPU使用率 工具: vmstat 检查应用性能时,应该首先审查CPU时间。 代码优化的目的是提升而不是降低(更短时间段内的)CPU的使用率。...线程页面会提供详细的线程信息,单击Thread Dump按钮可以导出当前所有线程的堆栈信息,如果Visual VM在当前线程中找到死锁,则会以十分显眼的方式在Threads页面给予提示。...,可以找到改程序中占用CPU时间最长的方法: 默认Visual VM不统计内置对象的函数调用,比如java....Visual VM虽然可以统计方法的调用时间,但是无法给出方法调用堆栈,Jprofile不仅可以给出方法调用时间,还可以给出方法调用堆栈,较Visual VM更强大。...右击左导航的应用程序,会出现以下菜单: 单机应用程序快照,可以分析当前应用程序的快照,单击堆Dump能够对当前的堆信息进行分析。

    61620

    java 调用win32 api 学习总结

    概要 JWINDOW 示例阐释如何从 Java 应用程序调用 Win32API。...此示例阐释如何使用 @ dll.import 指令来调用 Win32DLL 函数从 Java、 回调和嵌套结构类型。...该库已经对Linux和Windows系统中的API进行了封装,例如对Windows,使用它里面的接口调用就和在Delphi等开发工具中的调用方法是一样的,因为函数的名字和参数都是一样的。...你能使用JNI去写一些native methods去允许Java Applications能呼叫native libraries中的函数,native methods的具体实现是可能C,C++或者Delphi...JNI也支持嵌入一个JVM实现到一个本地应用程序中去,去执行那些用Java语言编写的的模块.比如,一个C++编写的浏览器利用内嵌的JVM去执行下载到本地的applet。

    2.2K30

    Qt高级编码约定

    编译器/平台的特定问题 使用问号运算符时要格外小心。如果返回的类型不同,则某些编译器会生成在运行时崩溃的代码(您甚至不会收到编译器警告)。...s : "nothing"; // 运行时崩溃:QString与const char * 要非常小心对齐: 每当强制转换指针以增加目标的所需对齐方式时,在某些体系结构上,生成的代码可能会在运行时崩溃。...*/ static const int i = foo(); /* 错误: foo()调用未定义,可能根本不会被调用。...避免的操作 不要继承模板/工具类 由于析构函数不是virtual,这会导致潜在的内存泄漏问题。 这些符号没有被导出(大部分是内联的),会导致报符号冲突的编译错误提示。...这确保widget可以在不破坏二进制兼容性的情况下得到修复。 从Qt导出的所有函数必须以'q'或'Q'开头。可以使用"symbols"自动测试来验证。

    1.8K30

    Delphi类型和引用

    跟普通的过程或函数一样,调用方法时要注意形参和实参以及返回类型的匹配。不过在调用方法时 Object Pascal还隐含传递了一个参数Self,这个参数可能不大好理解,因为这涉及到虚拟与多态的概念。...我们可以初步把它理解为一个指向输出该方法的对象实例的指针。举例说明,我们在Delphi的可视环境下 建立一个表单窗口时,它实际上是创建了一个从TForm类中继承下的类类型。...抽象方法在C++中称为虚函数,至少含有一个虚函数的类称为抽象类,抽象类不能建立对象实例。...从形式上讲,构造和析构也是过程或函数,不同的是普通的过程和函数是用Procedure或Function声 明的,而构造和析构分别是用Constructor和Destructor声明的,例如: Type...注意:尤其是熟悉C++的程序员要注意,在C++中,当您用一个类类型声明一个对象时,将自动调 用类的构造函数(这也是C++中一般不需要显式调用构造函数的原因),而在object Pascal中,当您声 明了一个类类型的变量

    2.5K30

    vc++菜鸟教程_vc6.0使用教程详解

    关于如何编写VCL控件,和多Delphi的书籍里都有介绍,在此简单的说明一下。 在Delphi中,TComponent是所有VCL构件的基础。编写非可视构件以便从TComponent派生。...Delphi提供了若干专门用于制作控件(可视构件)的基本构件类型,都是从TControl和TWinControl派生而来。...增加类似于C++一样 的类型转换函数,不用每一次自己调用函数转换 property AsInteger:Integer read GetAsInteger write SetAsInteger;...与Notification方法一样,使用时,在新的构件里覆盖掉Loaded方法,然后在Loaded方法里写上载入完毕的代码就可以了; Updating方法:当一个构件正在被改变时,被调用;...Updated方法:当一个构件改变完毕时,被调用。

    1.6K10
    领券