动态库

安装protobuf可能遇到的问题

社会主义新天地 提交于 2019-12-05 00:31:22
下载protobuf-2.3.0: http://protobuf.googlecode.com/files/protobuf-2.3.0.zip http://code.google.com/p/protobuf/downloads/list 安装: unzip protobuf-2.3.0.zip cd protobuf-2.3.0 ./configure make make check make install 1.每步在执行过程中注意权限问题,有的命令不sudo执行会出问题。 ./configure make make check make install 2. 执行./configure 出现error,查看config.log文件看看是否缺某些安装软件,比如g++未安装等,因为执行文件中含有C++程序,所以出问题。 3.动静态库问题部分是转载 在Linux上编译google protobuff时,configure 默认选项是生成动态库,即libprotobuf.so文件。如果同时在多个动态库(动态库以 dlopen方式动态加载 )中使用同一buff结构,则运行时会报错误: ibprotobuf ERROR google/protobuf/descriptor_database.cc:57] File already exists in database: foo

代码注入及其拓展--逆向开发

此生再无相见时 提交于 2019-12-04 17:52:41
今天继续讲述逆向开发中另一个比较重要的课程是代码注入内容,本篇篇幅比较长,但还是有很多干货的,希望大家通过此篇文章更加了解逆向开发中的要点和知识点.我们将分解几个内容,进行讲解: Framework注入 Dylib注入 MethodSwizzle 微信示例讲解 总结 让代码执行自己的代码,整体方案如下: 如何让别人的app来执行自己的代码呢? 这就要通过 代码注入 的方式来达到,而代码注入的方式有两种: 一种是通过 framework , 一种是 dylib 方式,另种方案,可以通过 Runtime机制 代码注入思路: DYLD会动态加载动态库Framework中所有动态库,在frameworks中加入自己的一个动态库,然后在动态库中hook和注入代码. 一、FrameWork注入 1.准备工作 微信6.6.5(越狱应用) MachOView软件   MachOView的下载地址: http://sourceforge.net/projects/machoview/   如果想看源码如下:MachOView源码: https://github.com/gdbinit/MachOView yololib工具(给MachOView注入framework)   yololib工具下载地址: https://github.com/KJCracks/yololib?spm=a2c4e

编译lua解析器和lua动态库

▼魔方 西西 提交于 2019-12-04 16:49:55
编译lua动态库 在vs2017中新建一个空项目,项目名luadll。 鼠标右键项目,配置选“所有配置”,平台选“所有平台”。 常规: 输出目录:$(SolutionDir)..\bin\$(Platform)\$(Configuration)\ 中检目录:$(SolutionDir)..\bintemp\$(Platform)\$(ProjectName)\$(Configuration)\ 项目默认值中,配置类型选“动态库(.dll)” 我将下载好的lua源码和这个项目放在同一个目录下,luasrc是所有lua源码。 鼠标右键项目->添加->现有项,将luasrc目录下的lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c lbitlib.c lcorolib.c ldblib.c liolib.c lmathlib.c loslib.c lstrlib.c ltablib.c lutf8lib.c loadlib.c linit.c这些c文件,全部选上,引入过来。

Framework打包前传

瘦欲@ 提交于 2019-12-04 15:11:28
关于库的一些基础知识 首先来了解一下什么是库:库(Library)其实是一段编译好的二进制代码,然后将头文件暴露出来(OC中就是.h文件,swift中打包后Xcode将会自动生成.h文件 需要将Swift代码前面添加public)提供给别人使用 关于为什么使用库!1.只提供给使用者接口而不暴露出来具体的实现方式 2.不会对代码进行较大的频繁的改动,减少编译时间(因为库就是一段已经编译好的二进制代码使用时候只需要Link一下就可以了) 关于Link 就衍生出来了 静态链接以及动态链接,也就是动态库以及静态库 1.静态库 静态库即静态链接库(Windows 下的 .lib,Linux 和 Mac 下的 .a) 使用时直接copy一份在项目中,在目标程序中就不会改变了。 好处:没有外部依赖,直接运行 缺点:使目标项目体积增大 2.动态库 动态库即动态链接库(Windows 下的 .dll,Linux 下的 .so,Mac 下的 .dylib) 与静态库相反,动态库编译时候不会copy到程序中,只会存储动态库的引用。等程序运行时才会加入动态库 编译才载入的特性,也可以让我们随时对库进行替换,而不需要重新编译代码 优点:不会增大目标程序体积,同一份库可以被多个程序使用 缺点:一部分性能损失。依赖于外部环境。如果环境缺失或者库版本不对。将会导致程序无法运行 iOS:Framework

gcc 和 库

依然范特西╮ 提交于 2019-12-04 12:08:28
一、gcc编译器编译的四个流程 简:     预处理 、编译 、汇编 、链接 详:   c和c++ 编译器是集成的,编译一般分为4个步骤:   预处理(preprocessing)         gcc -E XX.c -o XX.i      --->宏替换,展开头文件   编译(compilation)           gcc -S XX.i -o XX.s      --->检查语法,生成汇编文件   汇编 (assembly)           gcc -c XX.s -o XX.o      --->生成目标文件(二进制文件)   链接(linking)             gcc XX.o -o XXX       --->链接库,检查环境变量,生成可执行文件   执行     ./XXX 支持后缀: .c c原始程序 .C/.cc/.cxx c++原始程序 .m Objective-C原始程序 .i 已 经过预处理的c原始程序 .ii 已 经过预处理的c++原始程序 .s/.S 汇编语言原始程序 .h 预处理文件(头文件) .o 目标文件 .a/.so 编译后的库文件(动态库,静态库) 常见错误: 1.头文件错误 预处理阶段(Can not find include file head.h) -I 头文件路径 2.C语法错误 编译阶段 (syntex

讨论JAVA和QT之争

不想你离开。 提交于 2019-12-04 06:54:06
这是两种以跨平台为特色的开发方式。Qt更多被认为是一种框架,但是Qt中有新增一些C++所没有的语法,所以也可以认为是一种编程语言。Java被认为是一种编程语言,但是很多人并不知道JAVA的编程语言其实是Java SE,而他们所知的Java EE其实不是编程语言,反而是一种框架。 Qt和Java到底怎么选?没有任何明确需求的前提下,我认为尽可能使用Java,因为Java能够解决Qt不能解决的问题,而Java不能解决的问题Qt却基本没办法。Java和Qt都依赖C/C++,都是作为C/C++的延伸,讨论Java和Qt的时候,认为C++是两者共有的部分,只不过Qt更直接一点。 然后是一些相关需求下的对比。需要指出,现在是2019年10月,Java与Qt都有很大的发展。很多不了解Java的人妄言Java是用来做互联网的。这是一种误解。Java是全能型的编程语言,本身主要面向单台设备的开发,然后在单台设备之上才建立起各种脚本语言用以支持互联网。其中的Java语言也就是JavaSE是与互联网没什么关系的,它的竞争对手是纯C/C++编程以及Qt。互联网JavaEE其实不是Java语言,而是Java和C/C++共同的产品。JavaEE是一种产品类型,它的竞争也是产品级的竞争,也是JavaEE的内部竞争,主要是各种网页服务器软件,这里不提。我们现在所说的Java是指Java语言也就是JavaSE。

优化的内存访问 TCMalloc

喜你入骨 提交于 2019-12-04 02:16:46
TCMalloc ( Thread-Caching Malloc )是 google-perftools 工具中的一个,与标准的 glibc 库的 malloc 相 比, TCMalloc 在内存的分配上效率和速度要高得多,可以提高 Mysql 服 务器在高并发情况下的性能,降低系统负载。 Google-perftools 的项目: http://code.google.com/p/google-perftools/ TCMalloc 的原理介绍翻译: http://shiningray.cn/tcmalloc-thread-caching-malloc.html google-perftools 包括 TCMalloc 、 heap-checker 、 heap-profiler 和 cpu-profiler 共 4 个组件,在只 用 TCMalloc 的场景下,可以不编译其他三个组件,使用 tcmalloc_minimal 就足够。 下面介绍在 Linux SUSE x86 上安装 TCMalloc 动态库的过程。 安装 TCMalloc 从 http://code.google.com/p/google-perftools/ 下载源码包,现在最新版本是 1.4 。如果机器联网,直接: wget http://google-perftools.googlecode.com

gcc详解以及静态,动态库的生成 2

拟墨画扇 提交于 2019-12-03 22:28:40
我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两 种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态 库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运 行时还需要动态库存在。本文主要通过举例来说明在Linux中如何创建静态库和动态库,以 及使用它们。 在创建函数库前,我们先来准备举例用的源程序,并将函数库的源程序编译成.o文件。 第1步 :编辑得到举例的程序--hello.h、hello.c和main.c; hello.c(见程序2)是函数库的源程序,其中包含公用函数hello,该函数将在屏幕上输出" Hello XXX!"。hello.h(见程序1)为该函数库的头文件。main.c(见程序3)为测试库文件的 主程序,在主程序中调用了公用函数hello。 程序1: hello.h #ifndef HELLO_H #define HELLO_H void hello(const char *name); #endif //HELLO_H 程序2: hello.c #include <stdio.h> void hello(const char *name) { printf("Hello %s!\n", name); } 程序3: main.c #include "hello.h" int

Linux GCC编译使用动态、静态链接库

浪子不回头ぞ 提交于 2019-12-03 21:55:03
在windows下动态链接库是以.dll后缀的文件,二在Linux中,是以.so作后缀的文件。 动态链接库的好处就是节省内存空间。 1、Linux下创建动态链接库 在使用GCC编译程序时,只需加上-shared选项即可,这样生成的执行程序即为动态链接库。 例如有文件:hello.c x.h main.c [plain] view plain copy 编译:gcc hello.c -fPIC -o libhello.so 其中-fPIC选项的作用是:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的, 所以动态载入时是通过代码拷贝的方式来满足不同的调用,而不能达到真正的代码段共享的目的. 将main.c与hello.so动态库 [plain] view plain copy gcc main.c -L. -lhello -o main 一、动态链接库 1.创建hello.so动态库 [cpp] view plain copy #include <stdio.h> void hello(){ printf("hello world\n"); } 编译:gcc -fPIC -shared hello.c -o libhello.so 2.hello.h头文件 [cpp] view plain copy void hello(); 3.链接动态库 [cpp] view

vi 编辑器,gcc 编译器的使用

六月ゝ 毕业季﹏ 提交于 2019-12-03 21:53:56
vi 编辑器 是我们在linux下经常使用的文本编辑器,这个东西也是专门为程序员准备的,基本上每个Unix和Linux系统都为我们提供了这个软件,我们可以使用vi来编写我们的代码。 在vi编辑器下所有操作都必须通过键盘和特定的快捷键组合来完成,刚开始学习的新手会感觉不太容易,但是这个东西很重要,我们先来学习如何使用它,掌握了这个东西去面试的时候也算是一门技能。 而vim是vi的增强版,新增加了很多功能。 在shell下输入命令vi 文件名,例如:vi first.c,就开始编辑first.c文件了。vi编辑器有三种模式,它们分别为 命令模式,底行命令模式和编辑模式, 各个模式的转换如下。 命令模式( 按i进入编辑模式。按":"进入底行命令模式 )。当我们vi first.c的时候一进入就是命令模式,在这个模式下,我们可以执行如下的操作。 x:删除一个字符 dd:删除光标所在行 ndd:删除n行 p:粘贴光标下行,就是把复制的内容粘贴到光标所在行的下一行。 yy:复制光标所在行 nyy:复制n行 u:恢复上一次操作 编辑模式( 按Esc回到命令模式,然后再按下:就到了底行命令模式 )。在命令模式的时候我们按下i键就进入了这个模式,这个时候就可以编辑文字了。我们输入的每个字符都会写上去,不像命令模式那样字符代表的是一种命令。 底行命令模式 :支持如下的一些常用命令