【linux – 32位模式下的NASM x86_64汇编:为什么该指令会生成RIP相对寻址代码?】教程文章相关的互联网学习教程文章

在Linux中,考虑到32位体系结构,将为每个进程提供4GB的虚拟地址空间

嗨,我是Linux内核开发的新手.因此,需要对以下语句进行一些澄清. *>在内存中,每个进程都获得4GB的虚拟地址空间considering a 32-bit architecture. The lower 3GB virtual addresses isaccessible to the user space portion of the process and the upper 1GBis accessible to the kernel space portion.*>这是否意味着linux中的每个进程都分配了1GB 3GB这么多的内存空间?>如果是,那么linux中有数百个进程,那么从系统获得如此多的...

linux系统中32位和64位的区别?【图】

在linux中如何区分32位还是64位系统? 64位 32位 32位的linux和64位的linux有何不同?1 定位不同32位是为普通用户设计的 64位是为高科技人员设计的系统 具有高性能和科学计算的能力2 安装要求配置不同64位只能安装在64位的电脑上 32位都可以3 运算速度不同64位是32位运算速度的2倍4寻址能力不同32位最多支持4GB(实际上也就是3.2GB)内存

linux – 强制GNU链接器生成32位ELF可执行文件【代码】

嗨我正在为我正在编写的编译器生成x86程序集,并且在我的64位VM上链接文件时遇到一些问题(汇编代码是32位). 我能够使用此命令组合目标文件:as --32 mult.S -o mult.o但我似乎找不到任何使它生成32位ELF文件的选项:ld <some-option?> mult.o -o mult任何帮助都会很棒.解决方法:ld <some-option?> mult.o -o multld -m elf_i386 mult.o -o mult您可以获得可用架构的列表:ld -V样本输出:GNU ld (GNU Binutils for Ubuntu) 2.24Supp...

使用x86 32位Linux sys_write(NASM)打印整数【代码】

我是这个论坛的新手.我对高级语言有一点经验(真的很少).差不多一个月前,我认为在Linux上选择nasm(IA-32)之后,看看汇编是如何工作的,这是一个好主意我开始从一个教程中学习. 现在,在结束之后,我尝试编写一个简单的程序,让计算机打印100个数字的列表(1 2 4 8 16 …),但我甚至无法做到正确.我得到这个输出:1PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP(continues)...该计划是这样的:section .textglobal main main:mov word [num], '1'mov...

在Linux上创建.SO文件而不使用PIC(位置无关代码)(x86 32位)

据我所知,x86汇编代码受到有限数量寄存器的限制. 当我在Linux上了解到要创建一个.so文件时,必须为gcc指定-fPIC命令行参数以创建与位置无关的代码,我无法首先相信它. 据我所知,elf文件格式支持重定位,就像 – 在我眼中更好 – Windows DLL系统工作:在Windows上,链接器重定位DLL中的所有偏移,如果有必要的话. 我认为加载SO文件或DLL文件所需的时间,以及用于保存不同重定位的.so文件的内存量并不像缺少整个寄存器一样指向GOT并具有所...

linux – 32位x86程序集中堆栈对齐的责任【代码】

我试图清楚地了解谁(调用者或被调用者)负责堆栈对齐. 64位汇编的情况相当清楚,它来自调用者. 参考System V AMD64 ABI,第3.2.2节“堆栈帧”:The end of the input argument area shall be aligned on a 16 (32, if__m256 is passed on stack) byte boundary.换句话说,应该可以安全地假设,对于被调用函数的每个入口点: 16 | (%rsp 8) 保持(额外八个是因为调用隐含地在栈上推送返回地址). 它在32位世界中的表现(假设是cdecl)?我注...

如何确定给定的Linux是32位还是64位?【代码】

当我键入uname -a时,它给出以下输出.Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 i686 i686 i386 GNU/Linux我怎么知道给定的操作系统是32位还是64位? 这在编写配置脚本时很有用,例如:我构建的架构是什么?解决方法:尝试uname -m.缺少uname –machine,它输出:x86_64 ==> 64-bit kernel i686 ==> 32-bit kernel否则,不是针对Linux内核,而是针对CPU,键入:cat /proc/cpuinfo要么:grep flags /proc/cpu...

x86-64 Linux中不再允许32位绝对地址?

64位Linux默认使用小内存模型,它将所有代码和静态数据置于2GB地址限制之下.这可确保您可以使用32位绝对地址.较旧版本的gcc使用静态数组的32位绝对地址,以便为相对地址计算保存额外的指令.但是,这不再有效.如果我尝试在汇编中创建一个32位的绝对地址,我会收到链接器错误:“在创建共享对象时,不能使用针对`.data’的重定位R_X86_64_32S;使用-fPIC重新编译”.当然,此错误消息具有误导性,因为我没有创建共享对象,-fPIC也没有帮助.到目...

无法将UNIX / Linux程序编译为32位程序【代码】

我写了一个使用一些低级I / O的基本UNIX程序.没什么特别的,如果你想看一下这就是代码:#include <fcntl.h> #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h>#define BUFFSIZE 1024int main(int argc, char *argv[]) {// Character bufferchar buffer[BUFFSIZE];// File 1 descriptorint file1Desc = 0;// File 2 descriptorint file2Desc = 0;// Output file descriptorint outfileDesc = 0;// Co...

linux – 如何在我的64位机器上使用gcc编译32位.o文件?【代码】

试图学习NASM大会.我有一台64位机器,带有Ubuntu.最近我决定测试推送和弹出指令.我这样做:nasm -felf64 Test.asm显然,在64位模式下不支持它们.好吧,没问题,我只需要做到32:nasm -felf Test.asm现在,一如既往gcc Test.o但它现在告诉我i386 architecture of input file 'Test.o' is incompatible with i386:x86-64 output我不太明白这里的错误.如果显然我无法编译32位程序,如何在64位机器上测试push和pop?解决方法:“-m32”怎么样?...

在Linux 64位上组合C和汇编(32位代码)【代码】

我有一个64位的Ubuntu操作系统,我一直在学习32位汇编.我正在尝试编译这两个文件: square.s:#square.s.section .text .globl sqr .type sqr, @function sqr:pushl %ebpmovl %esp, %ebpmovl 8(%ebp), %eaximull %eax, %eaxpopl %ebpretmain.c://main.c #include <stdio.h> extern long sqr(long); int main(int argc, char* argv[]) {long squared = sqr(10);printf("%lu\n", squared);return 0; }在我的32位虚拟机上,我使用此命令...

c – 如何从运行的内核模块确定Linux内核是32位还是64位

这是交易.我想编写一个内核模块,它取决于内核类型(32位或64位).当且仅当内核为32位并且如果内核为64位时应包含的某些代码行,我希望将一些代码行包??含在模块中. 是否有像#if LINUX_VERSION_CODE<对于这种情况,KERNEL_VERSION(2,6,26)?解决方法:您可以检查CONFIG_X86_64和CONFIG_X86_32 – 如果拱是x86.对于其他架构,有类似的CONFIG选项.

linux – 用于32位LSB MIPS MIPS32架构的编译器【代码】

我有一个我正在尝试的电视机顶盒:我通过板上的串口建立了一个串口控制台连接.我正在尝试编译一个简单的C可执行文件以在此设备上运行,但我似乎无法找到如何执行此操作. 我尝试过CodeSourcery,cross-compiler-mipsel和uClibc,但它们没有用,后来用它的配置选项构建起来非常困惑. 以下是我能够收集的有关系统的数据: 示例文件架构:apps-startup: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically link...

java – 在64位Linux安装上缺少32位库【代码】

我试图弄清楚为什么Eclipse抱怨无法找到一个库.我设法重现/减少java问题:$ldd /home/jhendrix/.swt/lib/linux/x86/libswt-pi-gtk-3833.solinux-gate.so.1 => (0xf76fa000)libgtk-x11-2.0.so.0 => not foundlibgthread-2.0.so.0 => /usr/lib/i386-linux-gnu/libgthread-2.0.so.0 (0xf7674000)libXtst.so.6 => not foundlibc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf74c9000)libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-...

linux – VirtualBox只为我提供32位系统安装选项,但我有64位处理器

我有个问题.我有一个64位处理器(英特尔i7),我的VirtualBox无法识别它.错误就像“您没有找到64位处理器”.在选择分发时的选项中,您只能选择32位版本.我的主机系统是64位Kali,我不知道如何调试这个问题.重新安装没有帮助 – 我试过了.解决方法:除非你有一台大约2000台的主机,否则CPU肯定是64位的.您运行64位操作系统的事实排除了您拥有32位CPU.您可能面临此问题的原因有两个: >未启用虚拟化技术.要解决此问题,请在启动时进入主机设置...