64位ubuntu下编译32位汇编程序(同时链接C库)
as --32 cmd.s -o cmd.o # 调试的话加上选项 -gstabs
ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 cmd.o -o cmd -lc
--32声明为32位程序
链接时elf_i386也是表明链接32位库
-dynamic-linker /lib/ld-linux.so.2 使我们能链接到库,这样可执行文件会在执行前生成,而操作系统将加载程序/lib/ld-linux.so.2,以加载外部库并将其链接到程序。这种程序称为动态链接器。
选项-lc表示:链接库c。该库在GNU/Linux系统上的文件名称为libc.so。给定库名,在本例中为c(通常库不止一个字符),GNU /Linux链接器就爱那个字符串lib加至库名前,就爱那个字符串.so加到库名后,构成库文件名。这个库包含很多函数以自动执行各种任务。我们使用了 printf和exit。
当我们使用-lc来链接cmd程序时,将该选项告诉链接器使用c库(即libc.so)来寻找未在cmd,o中定义过的符号。但实际上这并未增加任何代码 到我们的程序,只是在程序中说明到哪里寻找。程序cmd开始时,首先加载文件/lib/ld-linux.so.2,这是动态链接器,会查看cmd程序, 并法线改程序需要c库才能运行。因此链接器在标准目录(即/etc/ld.so.conf下以及环境变量LD_LIBRARY_PATH中的所有目录下) 查找名为libc.so的库,然后在库中查找所需符号(即printf和exit),并加载到程序的虚拟内存。最后,链接库以库中printf的实际位置 代替程序中的printf的所有实例。
运行ldd ./cmd
这次会报如下信息
- linux-gate.so.1 => (0xf7763000)
- libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7590000)
- /lib/ld-linux.so.2 (0xf7764000)
相关推荐
现在XP退出历史舞台了,Win7代替了它,内在都有4G以上了,所以用64位操作系统是必须的,但是64位下用VB6编译带有数据库操作的程序可能无法在32位下正常使用!,这里提供解决方案,希望对VB6的用户有所帮助!
windows版本编译好的Boost库 包含头文件 和Lib 32位和64位全都有 下载就可用
总之,编译32位和64位的`luajava`需要对操作系统、JDK、C编译器以及Java开发有一定了解。确保每一步都针对正确的体系结构进行,并且在测试阶段仔细检查以确保兼容性。对于Windows用户,尤其需要注意选择合适的交叉...
在64位系统下编译Detours会报错。本资源是帮助那些编译遇到困难的朋友。包内包含Detours需要修改的代码,以及一个编译用的批处理文件,一个readme。 详情请参阅 ...
在Windows环境下编译64位版本的FFmpeg,需要遵循一定的步骤和注意事项。以下将详细介绍这个过程以及相关知识点。 1. **编译环境准备**: - 首先,你需要安装一个支持64位编译的编译器,如Visual Studio或MinGW-w64...
"androidAPK反编译工具32/64"提供了解决这一需求的工具,它包括了32位和64位版本,适应不同的操作系统环境。 首先,让我们来了解一下APK反编译的基本概念。反编译是将已编译的二进制代码转换回源代码的过程。对于...
64位系统能够提供更大的内存寻址空间和更高的性能,而32位应用则在某些情况下可能无法充分利用这些优势。标题提到的“64位系统调用32位Access运行时”涉及到的问题,主要是当一个64位的操作系统尝试运行32位版本的...
4. **32位与64位**:这里的“32位libiconv”和“64位libiconv”是指分别适用于32位和64位操作系统的库文件。32位系统使用x86架构,而64位系统使用x86_64或AMD64架构。不同的系统需要对应位数的库文件,否则程序可能...
在32位和64位的环境下,编译库的差异主要在于指针大小和内存管理,32位库适用于32位操作系统,而64位库则适用于64位系统。在实际项目中,需要根据目标平台选择相应的库版本。 使用TIFFLIB进行开发时,开发人员需要...
本篇将详细介绍awk的源码、Windows下的编译过程,以及针对64位和32位系统的不同编译步骤。 首先,了解awk的基本概念。awk来源于1977年贝尔实验室的三位开发者——Alfred V. Aho、Peter J. Weinberger和Brian W. ...
dnSpy是一款功能强大的32位反编译工具,它允许用户查看、编辑和调试.NET程序集,包括DLL和EXE文件。在这个32位版本中,你可以处理任何32位的.NET应用程序,揭示其内部工作原理,这对于软件开发、逆向工程、漏洞分析...
在Windows环境下编译32位和64位的luajava1.1涉及到多个步骤和技术细节,这是一项对操作系统和编程环境有深入了解的任务。Luajava是Lua语言与Java平台的桥梁,允许在Lua中调用Java代码,反之亦然。下面我们将详细探讨...
标题中的“64位系统到32位系统下跑”指的是在64位操作系统上开发的应用程序或组件可能无法在32位系统中正常运行的问题。这个问题通常涉及到系统架构的兼容性,因为32位和64位系统之间存在差异。描述中提到的解决方法...
标题 "64位系统可用 masm masm32 汇编工具" 提到的是在Windows 8 64位操作系统环境下使用的汇编语言编译工具,主要包括两个组件:ML.exe 和 MASM32。这里我们将深入探讨这两个组件以及它们在汇编编程中的角色。 1. ...
在本文中,我们将深入探讨如何使用Visual Studio 2019(VS2019)编译Qt 5.15.3版本以生成适用于32位系统的动态库。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面和移动平台,支持C++语言,并提供了丰富的图形...
这通常意味着在64位操作系统上安装32位库支持,如在Linux系统中的`ia32-libs`或`lib32*`系列包,在Windows下则可能需要Visual Studio的32位编译工具链。 **编译步骤** 1. **获取源代码**:从OpenSSL的官方网站下载...
总结一下,Detour2.1的32位和64位编译涉及的知识点包括:钩子技术、32位和64位系统的差异、C++编译器的配置、项目构建过程、编译错误排查以及Detour库的API使用。掌握这些知识,你就能有效地利用Detour2.1在不同的...
1. 32位静态库:对于还在使用32位系统的用户,或者是需要在32位环境下运行的应用程序,32位的Live555静态库是必需的。它能提供完整的编译和运行支持,无需额外安装依赖库。 2. 64位静态库:随着硬件的发展,64位...
OpenCV(开源计算机视觉库)是一个强大的跨平台计算机视觉库,包含了众多图像处理和计算机视觉的算法。...这个编译好的32位库对于那些使用x86架构系统的开发者来说,是直接可用的,省去了他们自己编译的繁琐过程。