草庐IT

c++ - 在 Windows 中检索已编译函数的大小

我正在寻找一种方法来确定已编译函数的大小(以字节为单位)。我做了一点研究,在大多数编译器上你不能使用sizeof(functionName)。我查看了PE32header,但只能找到其中列出的入口点地址。使用GCC时,我认为您可以使用链接描述文件,并且itseemstheinfoisalsocontainedintheELFfileheaders.但是,这些解决方案仅适用于Unix。有没有办法在Windows中做到这一点?我正在使用VisualStudio并想知道链接器是否能够做到这一点。另一种方法是机器代码分析(跟踪jmps和ret操作码;我不知道这有多可靠),但这似乎很难实现。编辑

windows - 动态与静态 DLL 链接不同

我有一个CDLL,想从DelphiXE3Update2调用它。奇怪的是,在我的项目中动态调用它似乎与静态调用它不同。这是要重现的“最小”代码(我已经更改了Lib/functionnames):programtestProject;{$APPTYPECONSOLE}{$R*.res}usesSystem.SysUtils,System.classes,Windows;functionkeylist_open(keylist:PPointer):Integer;external'libLib';varHandle:HINST;DLLName:PChar='libLib.dll';typeT

windows - __declspec(dllimport) 的必要性

我在看这个:ImportingFunctionCallsUsing__declspec(dllimport)而且我不明白为什么真的需要__declspec(dllimport)?为什么链接器不能在链接阶段将调用func1修补为调用DWORDPTR__imp_func1(IAT表地址)从而避免在源中单独声明的需要? 最佳答案 补丁指令空间不足可能是一个原因,但不是主要原因。即使有足够的空间,链接器仍然不会修补它以获得更好的性能。原因是链接器不做或修改编译器后端生成的代码,它只是用重定位信息修补地方。下面的例子不是很好的编码风格,但清楚

windows - 如何将 .asm 文件汇编并链接到 Win32 可执行文件?

我的系统上安装了NASM和Dev-Cpp。Dev-cpp随LD(GNU链接器)一起提供。我不熟悉汇编代码和从汇编文件创建32位Windows可执行文件的过程。我试过使用这个:nasm-fwin32ass.asmnasm-oassass.o我没有成功使用这些命令来创建可执行文件。汇编(使用NASM)和链接以生成将在32位Windows上运行的可执行文件的正确方法是什么? 最佳答案 您的一条评论(似乎已不复存在)确实提到您在Windows上安装了Dev-Cpp。如果您的路径上有Dev-CppMinGWbin目录,则GNU链接器LD可供您

c - 在没有 C 运行时的情况下与 VS2010 链接时未解析的符号

我正在处理一个有大小限制的项目,所以我不想链接到VisualStudio的C运行时。我使用静态运行时(/MT)和/NODEFAULTLIB:LIBCMT标志来执行此操作。我已经通过检查VS附带的运行时源解决了大部分问题。但是,编译器仍然会生成一些未解析的外部符号:_chkstk:生成用于检查大于4k的函数的堆栈。我可以关闭它或提供虚拟功能吗?__libm_sse2_pow和其他SSE调用:我可以通过关闭SSE代码生成来避免这些,但如果可能的话,我希望拥有它们。这些符号似乎来自Intel库(libmmd.lib?)。为什么这部分仍然是C运行时?_ftol2_sse:将浮点型转换为长整型。

c# - 如何将 C# 和 C++ 程序集链接到单个可执行文件中?

我的VS2008解决方案包含一个生成C#可执行文件的项目,该项目引用一个生成包含C++/CLI和非托管C++的dll的项目。我想将它们合并到一个可执行文件中,因为C++dll包含我想嵌入到主可执行文件中的安全代码。我不能使用ILMerge,因为dll包含托管和非托管代码。建议的解决方案似乎是使用link.exe将C#程序集与C++目标文件链接起来。这就是我想要做的。我手动编辑了c#可执行文件的项目文件以生成网络模块。我向可执行项目添加了构建后步骤以运行link.exe将c#netmodule和编译的C++目标文件链接在一起,然后运行​​mt.exe合并两个项目创建的程序集list。这运

c# - 静态链接的优势

我最近在这里读到一个关于静态和动态链接的问题,这让我想起了一些关于它的问题。从那篇文章中,我可以看出技术上的区别是什么(直接包括目标文件内容而不是仅仅指向它),但我想更多地了解这样做的优缺点。不久前,我的一位编程多年的friend感叹C#不是静态链接,并说这是他最希望future版本具备的功能。不幸的是我是新手,并不真正理解这种说法。谢谢指教! 最佳答案 静态链接的优点是它消除了对库的外部依赖——即你正在使用的库的行为永远不会因为有人改变了磁盘上的库而改变。这也是静态链接的缺点之一;如果操作系统发生变化并且需要新版本的库才能正常使用

c# - 在 C# 中静态链接

我正在为CMS开发一个模块。该模块作为类库DLL分发。我想在这个模块中使用几个实用程序库。无论如何我可以静态链接这些库,这样我就不必分发几个DLL(从而单独分发我的实用程序库)?我希望只有一个DLL。 最佳答案 您可以使用ILMERGE合并您的许多DLL:http://research.microsoft.com/~mbarnett/ILMerge.aspx我自己没试过。希望对您有所帮助。在这里下载:http://www.microsoft.com/downloads/details.aspx?familyid=22914587-B

tomcat下的java.lang.UnsatisfiedLinkError

我有一个java类(eval.java),它调用so文件(libmodel.so)中的native方法。我可以使用System.loadLibrary()加载libmodel.so而不会出现任何错误(-Djava.library.path=/usr/lib),并且本地方法initModel()工作正常。但是,当我将其部署为Web服务(tomcat6.0.26+axis21.5.1+eclipseJavaEEhelios)以调用native方法时,出现以下错误(第一行表示.so已成功已加载):Loadlibrarysuccessfully[ERROR]com.model.modelJNI

java - 为什么 GCJ 找不到我导入的包中的类?

我想将小型Java应用程序编译为Windows可执行文件。应用程序很小,只有一个主类,但它使用ApachePOI。当我编译它时,一切正常,只要我将POIJar放入类路径参数中即可。但是当涉及到链接时,GCJ无法解析对POI包中类的引用。消息都是这样的:undefinedreferencetp'org::apache::poi:hssf:usermodel:HSSFWorkbook::class$'要链接我的应用程序,我必须做什么? 最佳答案 你必须将导入的Jars单独编译成.so库。确保在编译库和编译代码时都在--classpath