草庐IT

IDA汇编

全部标签

C++ 内联汇编(英特尔编译器): LEA and MOV behaving differently in Windows and Linux

我正在转换一个巨大的Windowsdll以在Windows和Linux上运行。该dll有很多用于视频操作的程序集(和SS2指令)。代码现在可以使用Windows上的英特尔ComposerXE-2011和Linux上的英特尔ComposerXE-2013SP1中包含的英特尔编译器在Windows和Linux上正常编译。但是,当尝试调用函数指针时,在Linux中执行会崩溃。我跟踪了gdb中的代码,实际上函数指针没有指向所需的函数(而在Windows中确实如此)。几乎其他一切都正常。这是代码序列:...movrdi,thisleardx,[rdi].m_sSomeStruct...leara

Linux 汇编程序错误 "impossible constraint in ‘asm’“

我从Linux下的汇编程序开始。我已将以下代码保存为testasm.c并编译它:gcctestasm.c-ostasm编译器回复:“'asm'中不可能的约束”。#includeintmain(void){intfoo=10,bar=15;__asm____volatile__("addl%%ebx,%%eax":"=eax"(foo):"eax"(foo),"ebx"(bar):"eax");printf("foo=%d",foo);return0;}我该如何解决这个问题?(我从here中复制了示例。)DebianLenny,内核2.6.26-2-amd64gcc版本4.3.2(Deb

c - 如何将 C 目标文件与汇编语言目标文件链接起来?

我在链接2个目标文件时遇到问题,其中一个是从汇编语言源文件生成的,另一个是从C源文件生成的。C源代码://main2.cexternintstrlength(char*);intmain(){char*test="hello";intnum=strlength(test);returnnum;}汇编源代码:#strlength.s.include"Linux32.s".section.text.globlstrlength.typestrlength,@functionstrlength:pushl%ebpmovl%esp,%ebpmovl$0,%ecxmovl8(%ebp),%edx

c - 汇编的 Linux 系统调用表或速查表

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答它。关闭2年前。Improvethisquestion有谁知道在哪里可以找到Assembly中Linux系统调用的汇总表或备忘单?我正在通过int0x80指令调用Linux系统调用,我需要一个快速引用来确定哪个寄存器包含哪个值不时。

linux - 帮助理解 GDB 中一个非常基本的 main() 反汇编

嘿嘿我编写了这个非常基本的main函数来尝试反汇编,并查看并希望了解较低级别发生的事情:intmain(){return6;}使用gdb来disasmain会产生这个:0x08048374:lea0x4(%esp),%ecx0x08048378:and$0xfffffff0,%esp0x0804837b:pushl-0x4(%ecx)0x0804837e:push%ebp0x0804837f:mov%esp,%ebp0x08048381:push%ecx0x08048382:mov$0x6,%eax0x08048387:pop%ecx0x08048388:pop%ebp0x080483

linux - 在 64 位 ubuntu 上编译 32 位汇编器

这个问题在这里已经有了答案:Assembling32-bitbinariesona64-bitsystem(GNUtoolchain)(2个答案)关闭6年前。我有一个用32位汇编语言编写的程序...现在我无法在64位操作系统上编译它。在我们学校,它们是特定的,程序必须用32位版本编写。这是我的程序:bits32extern_printfglobal_startsection.datamessagedb"Helloworld!!",10,0section.text_start:pushadpushdwordmessagecall_printfaddesp,4popadret有什么想法吗?

linux - 如何在 Linux 下使用汇编和系统调用动态分配内存

我正在寻找一些在Linux下使用汇编语言和使用系统调用而不是malloc和friend的动态内存分配的好代码示例。有哪些最简单但有效的方法可以做到这一点?在Intel386+计算机上。 最佳答案 在Linux上,mmap2是一个明智的系统调用,可用于低级别。它需要6个参数,因此在IA32中你可以使用以下方式调用它:moveax,192;mmap2xorebx,ebx;addr=NULLmovecx,4096;len=4096movedx,$7;prot=PROT_READ|PROT_WRITE|PROT_EXECmovesi,$22

c - 我怎样才能用gcc编译成汇编

如何使用gcc编译成程序集而不是可执行文件。我知道有一个-S标志,但我在makefile中的什么地方使用它。例如,如果我使用标志-O3-oexe_name,我应该将-S标志放在哪里? 最佳答案 我还建议使用-fverbose-asm,因为这样生成的汇编程序会生成一些注释,“解释”代码。例如:gcc-S-fverbose-asm-O2foo.c将在foo.s中生成(带有一些注释)通过编译foo.c生成的汇编代码要了解GCC优化的作用,甚至可以尝试-fdump-tree-all(但这会产生数百文件!)。

从 c 调用汇编函数

我正在尝试在汇编中使用一个从C项目调用的函数。这个函数应该调用一个libc函数,比方说printf(),但我一直遇到段错误。在.c文件中我有函数声明intdo_shit_in_asm()在我的.asm文件中.externprintf.section.dataprinttext:.ascii"test".section.text.globaldo_shit_in_asm.typedo_shit_in_asm,@functiondo_shit_in_asm:pushl%ebpmovl%esp,%ebppushprinttextcallprintfmovl%ebp,%esppop%ebpre

c++ - 在 C/C++ 程序中使用汇编程序优化某些功能真的值得吗?

在某些开发领域,例如游戏开发、实时系统等,拥有一个快速且优化的程序非常重要。另一方面,现代编译器已经进行了大量优化,在一个需要考虑截止日期的世界中,在汇编中进行优化可能会很耗时。问题:正在使用Assembly优化某些功能C/C++程序真的值得吗?真的有足够的收获吗?优化C/C++时的性能与今天的assembly程序现代编译器?我对发布的答案的理解是,在某些领域,例如嵌入式系统、多媒体编程(图形、声音等),可以获得的任何yield都很重要。此外,与现代编译器相比,需要有能力(或有能力)在汇编中做得更好。做一些真正优化的C/C++可以花费更少的时间并且可以做得足够好。最后一件事,学习汇编可