Questions tagged «assembly»

汇编语言(asm)编程问题。确保还标记您正在使用的处理器和/或指令集以及汇编器。警告:对于.NET程序集,请使用标签[.net-assembly]。对于Java ASM,请改用标记[java-bytecode-asm]。

10
为什么x86丑陋?与其他人相比为什么被认为是次等的?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 最近,我一直在阅读一些SO档案,并遇到了针对x86体系结构的声明。 为什么我们需要针对服务器,小型/大型机和混合核的不同CPU体系结构?他说: “ PC体系结构是一团糟,任何OS开发人员都会告诉你。 ” 学习汇编语言值得吗?(已存档)说: “意识到x86架构充其量是可怕的 ” 有什么简单的方法来学习x86汇编程序?表示: “ 大多数大学都在MIPS之类的课程上教授汇编语言,因为它更容易理解,x86汇编确实很难看。 ” 还有更多评论,例如 “与大多数体系结构相比,X86非常糟糕。” “ X86不如MIPS,SPARC和PowerPC,这绝对是传统观念 ” “ x86很丑 ” 我尝试搜索,但没有找到任何原因。我认为x86不错,可能是因为这是我所熟悉的唯一体系结构。 有人可以给我理由比其他人考虑x86丑/坏/劣等。

7
调用堆栈如何工作?
我试图更深入地了解编程语言的低级操作是如何工作的,尤其是它们如何与OS / CPU交互。我可能已经在Stack Overflow上的每个与堆栈/堆相关的线程中阅读了每个答案,它们都很出色。但是还有一件事我还没有完全理解。 在伪代码中考虑这个函数,它通常是有效的Rust代码;-) fn foo() { let a = 1; let b = 2; let c = 3; let d = 4; // line X doSomething(a, b); doAnotherThing(c, d); } 这就是我假设堆栈看起来像第X行的样子: Stack a +-------------+ | 1 | b +-------------+ | 2 | c +-------------+ | 3 | d …


23
学习大会[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 改善这个问题 我决定学习汇编语言。这样做的主要原因是能够理解反汇编的代码,也许能够编写更有效的代码部分(例如,通过c ++),执行诸如代码探洞之类的工作,等等。 ,因此,出于上述目的,我应该如何开始?我应该学习哪种组装?我想先做一些简单的程序(例如计算器)来学习,但是目标是自己熟悉它,这样我才能理解显示的代码,例如IDA Pro。 我正在使用Windows(如果有任何区别)。 编辑:所以,似乎每个人都指向MASM。尽管我明白它具有高级功能,但对汇编代码程序员来说都很好,但这不是我想要的。它似乎具有流行的反汇编程序(如IDA)中未显示的if,invoke等指令。因此,如果可能的话,我想听听任何人使用ASM来满足我的要求(在IDA中读取反汇编exe的代码),而不仅仅是“通用”汇编程序员的意见。 编辑:确定。我已经在学习汇编了。我正在学习MASM,而不是使用对我来说无关紧要的高级知识。我现在正在做的是在c ++中的__asm指令上尝试我的代码,因此,与使用MASM从头开始做所有事情相比,我可以更快地进行尝试。
102 assembly 

5
“ FS” /“ GS”寄存器的用途是什么?
因此,我知道以下寄存器及其用途是什么: CS =代码段(用于IP) DS =数据段(用于MOV) ES =目标段(用于MOVS等) SS =堆栈段(用于SP) 但是,以下寄存器打算用于什么? FS =“文件段”? GS = ??? 注意:我不是在问任何特定的操作系统,而是在问它们打算由CPU使用什么(如果有的话)。


2
当项目中包含程序集文件时,mmap产生了意外的执行权限
我用这个把我的头撞到墙上。 在我的项目中,当我使用mmap映射(/proc/self/maps)分配内存时,尽管我只请求了可读内存,但它仍是一个可读且可执行的区域。 在研究了strace(看起来不错)和其他调试之后,我能够确定似乎唯一可以避免这个奇怪问题的东西:从项目中删除程序集文件,只保留纯C。(什么?!) 因此,这是我一个奇怪的示例,我正在使用Ubunbtu 19.04和默认gcc。 如果使用ASM文件(为空)编译目标可执行文件,则将mmap返回一个可读和可执行区域,如果不进行编译则其行为正确。请参阅/proc/self/maps示例中已嵌入的输出。 example.c #include <stdio.h> #include <string.h> #include <sys/mman.h> int main() { void* p; p = mmap(NULL, 8192,PROT_READ,MAP_ANONYMOUS|MAP_PRIVATE,-1,0); { FILE *f; char line[512], s_search[17]; snprintf(s_search,16,"%lx",(long)p); f = fopen("/proc/self/maps","r"); while (fgets(line,512,f)) { if (strstr(line,s_search)) fputs(line,stderr); } fclose(f); } return 0; } example.s:是一个空文件! 产出 附带ASM版本 VirtualBox:~/mechanics/build$ gcc example.c …
94 c  linux  assembly  mmap 

5
EBP帧指针寄存器的用途是什么?
我是汇编语言的初学者,并且注意到编译器发出的x86代码即使在释放/优化模式下也可以将EBP寄存器用于其他用途时,通常也会保持帧指针。 我理解为什么帧指针可能使代码更易于调试,并且如果alloca()在函数中调用它可能是必需的。但是,x86的寄存器非常少,当其中一个寄存器足够用时,使用其中两个寄存器来保持堆栈帧的位置对我来说是没有意义的。为什么即使在优化/发布版本中也忽略帧指针还是​​一个坏主意?

3
如何使用GDB查看堆栈的内容?
我是GDB的新手,所以我有一些问题: 如何查看堆栈的内容?示例:要查看寄存器的内容,请输入info registers。对于堆栈,应该是什么? 我怎么看的内容$0x4(%esp)?当我输入时print /d $0x4(%esp),GDB给出了一个错误。 平台:Linux和GDB
94 c  assembly  gdb 

8
哪个更快:if(bool)或if(int)?
使用哪个值更好?布尔值是true还是Integer 1? 上面的话题让我做一些实验与bool和int的if状态。因此,出于好奇,我编写了以下程序: int f(int i) { if ( i ) return 99; //if(int) else return -99; } int g(bool b) { if ( b ) return 99; //if(bool) else return -99; } int main(){} g++ intbool.cpp -S 为每个函数生成asm代码,如下所示: 的asm代码 f(int) __Z1fi: LFB0: pushl %ebp LCFI0: movl %esp, %ebp LCFI1: …
94 c++  assembly  int  boolean 

2
如何中断gdb中给定地址的汇编指令?
0x0000000000400448 <main+0>: push %rbp 0x0000000000400449 <main+1>: mov %rsp,%rbp 0x000000000040044c <main+4>: mov $0x6,%eax 0x0000000000400451 <main+9>: leaveq 0x0000000000400452 <main+10>: retq 我试过了: breaki 0x0000000000400448 但是似乎没有这样的命令。 gdb有这样的功能吗?
94 assembly  gdb 

14
字和字节有什么区别?
我做了一些研究。一个字节是8位,而一个字是可以在存储器中寻址的最小单元。单词的确切长度会有所不同。我不明白的是拥有一个字节有什么意义?为什么不说8位呢? 我问一个教授这个问题,他说现在大多数机器都是字节寻址的,那会产生什么呢?

7
学习汇编语言值得吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 9年前关闭。 改善这个问题 学习ASM仍然值得吗? 我对它了解得很少,但是我并没有真正使用它或正确学习它,因为我学习的所有汇编程序工作都可以用诸如C或C ++之类的语言在1/10的时间内完成。那么,我真的应该学习和使用ASM吗?这对我的专业有好处吗?会增加我的机智吗?简而言之,这会让我成为一个更好的程序员吗? 注意:我在说的是FASM或NASM之类的低级汇编,而不是HLA(高级汇编器)。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.