关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion我之前没有汇编编程知识,想学习如何在Linux平台上编写x86汇编代码。但是,我很难找到一个好的资源来自学。TheArtofAssembly这本书看起来不错,但它教授的是HLA。我对必须以一种方式学习,然后再重新学习它不感兴趣。RISC架构似乎也有更好的汇编资源,但不幸的是我没有RISC处理器来学习。有人有什么建议吗?
我正在使用64位ubuntu并尝试在NASM上运行.asm文件。但是当我尝试运行以下代码时它会返回此错误。我想做的是通过从源代码编译(或组装)目标文件来构建可执行文件$nasm-felfhello.asm,然后在创建文件hello.o后通过调用链接器从目标文件生成可执行文件本身$ld-s-ohellohello.o这最终将构建hello可执行文件。我正在学习本教程http://www.faqs.org/docs/Linux-HOWTO/Assembly-HOWTO.html错误:输入文件“hello.o”的i386架构与i386:x86-64输出不兼容代码:section.data;s
我正在使用64位ubuntu并尝试在NASM上运行.asm文件。但是当我尝试运行以下代码时它会返回此错误。我想做的是通过从源代码编译(或组装)目标文件来构建可执行文件$nasm-felfhello.asm,然后在创建文件hello.o后通过调用链接器从目标文件生成可执行文件本身$ld-s-ohellohello.o这最终将构建hello可执行文件。我正在学习本教程http://www.faqs.org/docs/Linux-HOWTO/Assembly-HOWTO.html错误:输入文件“hello.o”的i386架构与i386:x86-64输出不兼容代码:section.data;s
在引导加载程序将执行权交给内核之后,会发生什么?我知道汇编程序,那么内核必须执行的前几条指令是什么?或者是否有执行此操作的C函数?内核可以执行任意二进制文件之前的启动顺序是什么? 最佳答案 我假设您在这里谈论的是x86...这取决于您认为“引导加载程序”和“内核”之间的边界在哪里:内核本身的开始是32位保护模式代码,但内核本身提供了一些引导代码以从实模式到达那里.实模式代码在arch/x86/boot/中:start_of_setup为C做一些基本的环境设置,并调用main(),它做了一些相当乏味的事情,以实际跳转到保护模式结束(参
在引导加载程序将执行权交给内核之后,会发生什么?我知道汇编程序,那么内核必须执行的前几条指令是什么?或者是否有执行此操作的C函数?内核可以执行任意二进制文件之前的启动顺序是什么? 最佳答案 我假设您在这里谈论的是x86...这取决于您认为“引导加载程序”和“内核”之间的边界在哪里:内核本身的开始是32位保护模式代码,但内核本身提供了一些引导代码以从实模式到达那里.实模式代码在arch/x86/boot/中:start_of_setup为C做一些基本的环境设置,并调用main(),它做了一些相当乏味的事情,以实际跳转到保护模式结束(参
当用gcc链接一个用c(或asm)编写的类似hello-world的程序时,它会将一些内容添加到结果可执行目标文件中。我只知道运行时动态链接器和_start入口点,但这些添加的函数是什么样的?00000000004003f0tderegister_tm_clones0000000000400430tregister_tm_clones0000000000400470t__do_global_dtors_aux0000000000400490tframe_dummy00000000004004e0T__libc_csu_init0000000000400550T__libc_csu_fi
当用gcc链接一个用c(或asm)编写的类似hello-world的程序时,它会将一些内容添加到结果可执行目标文件中。我只知道运行时动态链接器和_start入口点,但这些添加的函数是什么样的?00000000004003f0tderegister_tm_clones0000000000400430tregister_tm_clones0000000000400470t__do_global_dtors_aux0000000000400490tframe_dummy00000000004004e0T__libc_csu_init0000000000400550T__libc_csu_fi
在Linux中,如果我有源代码树,我在哪里可以找到所有系统调用的源代码?此外,如果我想查找特定系统调用的源代码和程序集,是否可以在终端中输入类似my_system_call的内容? 最佳答案 您需要Linux内核源代码才能查看系统调用的实际源代码。手册页(如果安装在您的本地系统上)仅包含调用的文档,而不包含它们的来源本身。不幸的是,系统调用并不仅仅存储在整个内核树中的一个特定位置。这是因为各种系统调用可以引用系统的不同部分(进程管理、文件系统管理等),因此将它们与与系统特定部分相关的树部分分开存储是不可行的。您能做的最好的事情就是寻
在Linux中,如果我有源代码树,我在哪里可以找到所有系统调用的源代码?此外,如果我想查找特定系统调用的源代码和程序集,是否可以在终端中输入类似my_system_call的内容? 最佳答案 您需要Linux内核源代码才能查看系统调用的实际源代码。手册页(如果安装在您的本地系统上)仅包含调用的文档,而不包含它们的来源本身。不幸的是,系统调用并不仅仅存储在整个内核树中的一个特定位置。这是因为各种系统调用可以引用系统的不同部分(进程管理、文件系统管理等),因此将它们与与系统特定部分相关的树部分分开存储是不可行的。您能做的最好的事情就是寻
有什么地方可以获得每个系统调用所需的最低Linux版本的完整列表?我正在寻找“如果我使用系统调用X,我的代码可以在其上运行的最低Linux版本是什么?”形式的问题的一般答案? 最佳答案 此信息可以在syscalls(2)中找到手册页。对于那些没有指明内核版本的系统调用,系统调用出现在内核1.0或更早版本。 关于c-添加到Linux的系统调用的历史?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/qu