草庐IT

ASSEMBLY

全部标签

c - 是否有原始的 linux 系统调用 API/ABI 文档

系统调用有man(2)页面,但这些页面描述了位于系统调用之上的C库(glibc)的行为。原始系统调用API/ABI是否记录在某处(UseTheSourceLuke除外)?我在手册页中看到了一些关于内核/libc之间差异的提及,但我没有感觉到记录这些差异是头等大事。我真正想说的是:C库是否被POLICY视为稳定/记录的LinuxAPI,并且内核的系统调用API/ABI被认为是不稳定的(可能会更改),因此有意未记录或低优先级?那么更改系统调用的内核开发人员会在glibc中进行变通吗?那么其他的libc呢?我能找到关于这个主题的历史讨论吗?编辑:所以ABI是稳定的,系统调用的行为也是如此,但

linux - 64 位 linux,汇编语言,问题?

我目前正在学习汇编语言。我正在使用Gas在LinuxMint(32位)。使用本书:ProgrammingfromtheGroundUp.我使用的机器有一个AMDTurion64bit处理器,但我仅限于2GB的RAM。我正在考虑将我的Linux安装升级到64位版本的LinuxMint,但我担心因为本书针对的是32位x86架构,所以代码示例无法运行。所以两个问题:代码示例是否可能存在任何问题?这里有没有人注意到使用64位Linux比使用32位Linux总体上有什么好处(我在StackOverflow上看到过一些与此有关的帖子,但它们主要与WindowsVista和WindowsXP相关。)

linux - 64 位 linux,汇编语言,问题?

我目前正在学习汇编语言。我正在使用Gas在LinuxMint(32位)。使用本书:ProgrammingfromtheGroundUp.我使用的机器有一个AMDTurion64bit处理器,但我仅限于2GB的RAM。我正在考虑将我的Linux安装升级到64位版本的LinuxMint,但我担心因为本书针对的是32位x86架构,所以代码示例无法运行。所以两个问题:代码示例是否可能存在任何问题?这里有没有人注意到使用64位Linux比使用32位Linux总体上有什么好处(我在StackOverflow上看到过一些与此有关的帖子,但它们主要与WindowsVista和WindowsXP相关。)

linux - at&t汇编中的 'push'和 'pushq'有什么区别

我最近开始寻求更深入地了解我的计算机的工作原理。我的问题是关于push和pushq之间的区别。我知道push向堆栈写入一个值,我的假设是pushq做类似的事情。q在那里的事实让我认为应该存在细微的差异,但我似乎无法理解差异。我声明在使用gdb和命令“layoutasm”调试文件/lib/udev/iphone-set-info时思考这个问题。有问题的代码是:pushq$0x0push%r9我知道$0x0是NULL的十六进制,而%r9是通用寄存器之一。这是否仅仅意味着将Nullus写入堆栈并在其上方写入寄存器%r9? 最佳答案 我不确

linux - at&t汇编中的 'push'和 'pushq'有什么区别

我最近开始寻求更深入地了解我的计算机的工作原理。我的问题是关于push和pushq之间的区别。我知道push向堆栈写入一个值,我的假设是pushq做类似的事情。q在那里的事实让我认为应该存在细微的差异,但我似乎无法理解差异。我声明在使用gdb和命令“layoutasm”调试文件/lib/udev/iphone-set-info时思考这个问题。有问题的代码是:pushq$0x0push%r9我知道$0x0是NULL的十六进制,而%r9是通用寄存器之一。这是否仅仅意味着将Nullus写入堆栈并在其上方写入寄存器%r9? 最佳答案 我不确

linux - 为什么 gcc 4.x 在调用方法时默认为 linux 上的堆栈保留 8 个字节?

作为asm的初学者,我正在查看gcc-S生成的asm代码来学习。为什么gcc4.x在调用方法时默认为堆栈保留8个字节?func18是空函数,没有返回值,没有参数,没有定义局部变量。我不明白为什么这里保留8个字节(任何论坛/网站都没有提及原因,人们似乎认为这是理所当然的)是为了%ebp只是推送吗?或返回类型?!非常感谢!.globl_func18_func18:pushl%ebpmovl%esp,%ebpsubl$8,%esp.text 最佳答案 一些指令要求某些数据类型与16字节边界对齐(特别是SSE数据类型__m128)。为了满足

linux - 为什么 gcc 4.x 在调用方法时默认为 linux 上的堆栈保留 8 个字节?

作为asm的初学者,我正在查看gcc-S生成的asm代码来学习。为什么gcc4.x在调用方法时默认为堆栈保留8个字节?func18是空函数,没有返回值,没有参数,没有定义局部变量。我不明白为什么这里保留8个字节(任何论坛/网站都没有提及原因,人们似乎认为这是理所当然的)是为了%ebp只是推送吗?或返回类型?!非常感谢!.globl_func18_func18:pushl%ebpmovl%esp,%ebpsubl$8,%esp.text 最佳答案 一些指令要求某些数据类型与16字节边界对齐(特别是SSE数据类型__m128)。为了满足

linux - 为什么要在保护模式下启用 A20 线?

在Linux0.01的bootloader的汇编源文件中,A20行是使能的。来自boot/boot.s:|thatwaspainless,nowweenableA20callempty_8042moval,#0xD1...之后引导加载程序跳转到保护模式。在实模式下,启用A20行允许我们将地址空间扩展到64KiB-16字节。在保护模式下,地址总线自动解锁。为什么引导加载程序在跳转到保护模式时启用A20地址线? 最佳答案 InRealMode,enablingtheA20linegrantsusanaddressspaceexpansi

linux - 为什么要在保护模式下启用 A20 线?

在Linux0.01的bootloader的汇编源文件中,A20行是使能的。来自boot/boot.s:|thatwaspainless,nowweenableA20callempty_8042moval,#0xD1...之后引导加载程序跳转到保护模式。在实模式下,启用A20行允许我们将地址空间扩展到64KiB-16字节。在保护模式下,地址总线自动解锁。为什么引导加载程序在跳转到保护模式时启用A20地址线? 最佳答案 InRealMode,enablingtheA20linegrantsusanaddressspaceexpansi

linux - 从汇编文件中读取

我正在尝试学习汇编——Linux环境中的x86。我能找到的最有用的教程是WritingAUsefulProgramWithNASM.我给自己设定的任务很简单:读取文件并将其写入标准输出。这是我的:section.text;declaringour.textsegmentglobal_start;tellingwhereprogramexecutionshouldstart_start:;thisiswherecodestartsgettingexec'ed;getthefilenameinebxpopebx;argcpopebx;argv[0]popebx;thefirstrealar