草庐IT

反汇编

全部标签

linux - 汇编:为什么跳转到通过 ret 返回的标签会导致段错误?

LinuxAssemblyTutorial状态:thereisoneveryimportantthingtoremember:Ifyouareplanningtoreturnfromaprocedure(withtheRETinstruction),don'tjumptoit!Asin"never!"DoingthatwillcauseasegmentationfaultonLinux(whichisOK–allyourprogramdoesisterminate),butinDOSitmayblowupinyourfacewithvariousdegreesofterriblenes

linux - QEMU 是否适合学习 ARM 和 PowerPC 的汇编程序编程?

我想学习PowerPC和ARM的汇编程序编程,但我无法为此购买真正的硬件。我正在考虑为此使用QEMU。但是我不确定它是否足够好地模拟这两种架构,我是否会在其上使用native汇编程序编译和运行我的程序? 最佳答案 QEMU可以很好地测试程序校正(即代码是否可以在实际的ARM或PowerPC上正确运行)但它不适用于测试程序效率:仿真不是周期精确的,并且使用QEMU测量的速度不能可靠地(甚至不可靠地)与真实硬件上的速度相关联。此外,QEMU不会捕获未对齐的内存访问,这对于PowerPC仿真不是问题(PowerPC容忍未对齐的访问)但可能

c++ - 将源代码与 C++ 程序的汇编列表相关联

在零售构建中分析核心转储通常需要关联任何特定模块的objdump和源代码。如果函数非常复杂,通常将程序集转储与源代码关联起来会很痛苦。今天,我尝试创建一个特定模块的程序集列表(使用编译选项-S),希望我会看到一个带有程序集或某种相关性的交错源代码。不幸的是,该列表不够友好,无法关联,所以我想知道给定一个核心转储,我可以从中确定崩溃位置objdump通过重新编译失败的模块汇编列表带有-S选项的模块。是否可以与源做一一对应?例如,我将程序集列表视为.LBE7923:.loc248630movq%rdi,%r14movl%esi,%r12dmovl696(%rsp),%r15dmovq704

linux - 汇编语言中的段错误

我正在学习AT&Tx86汇编语言。我正在尝试编写一个接受整数n的汇编程序,然后返回结果(n/2+n/3+n/4)。这是我所做的:.text.global_start_start:pushl$24callprofitmovl%eax,%ebxmovl$1,%eaxint$0x80profit:popl%ebxpopl%eaxmov$0,%esimovl$4,%ebpdiv%ebpaddl%eax,%esimovl%ecx,%eaxmovl$3,%ebpdiv%ebpaddl%eax,%esimovl%ecx,%eaxmovl$2,%ebpdiv%ebpaddl%eax,%esimovl%

c - 如何在 Linux 上从汇编代码中调用 c 库?

我正在尝试在Intel架构的Linux汇编中编译一个小程序。我想使用C库的一些函数,但它没有链接。这是我的汇编程序:.text.globlmainmain:pushl$512callmallocaddl$4,%espmov$1,%eaxmov$0,%ebxint$0x80我正在编译as--32-ooutput.ooutput.asm在这里,一切顺利。然后当我链接到ld-static-melf_i386-oa.outoutput.o-lc,我遇到了这些错误:(.text+0x1b8):undefinedreferenceto_Unwind_Resume'/usr/lib32/libc.a

Linux 上的 C++/汇编 IDE

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭3年前。Improvethisquestion我正在寻找的是一个将在Linux上运行的IDE,它支持C++和x86汇编语法突出显示。我已经尝试过Code::Blocks,但它不允许我按需要运行该程序,因此效果不佳。我的需求:能够通过在某个目录下发出“makeall”来编译程序能够通过发出自定义命令而不是运行某个可执行文件来运行程序图形化(不是vim/emacs/等),将在GNOME/Fedora14中运行什么会很

c++ - 汇编中可变参数的有效模式

我觉得我的问题可能看起来有点奇怪,但就是这样;我正在尝试用C++动态创建一个程序(主要是为了它的乐趣,但也出于编程原因)并且它并不像听起来那么难。为此,您必须像这样在运行时使用程序集:byte*buffer=newbyte[5];*buffer='0xE9';//Codefor'jmp'*(uint*)(buffer+1)='addressdestination';//Addresstojumpto这比看起来容易得多,因为我只针对一个平台和编译器;GCC与Linux32位(并且只有一个调用约定,cdecl)。所以我试图创建一个动态汇编函数来重定向来自触发器的调用,这样我就可以使用类方法

c - 我如何在汇编中编写所有这些

我有两个宏,一个是用汇编写的,另一个是用C写的。第二个宏使用了第一个宏。但是,我还想用volatile在汇编中编写第二个宏,这样我就可以控制它在代码中的位置。请注意,tid是一个运行时值,而不是像n这样的常量。用汇编编写它的好方法是什么?此外,是否可以控制C代码的放置,例如使用volatile的汇编?#defineSAVE_SP(n)__asm____volatile__("movq%rsp,msp"#n";"\"movqts"#n",%rsp;"\)#defineSAVE_STACK_POINTER(tid)\switch(tid)\{\case0:\SAVE_SP(0);\brea

linux - 在 ubuntu 上运行汇编代码

我正在尝试运行的代码如下。我使用nasmutil将其转换为目标文件。当我尝试执行时,它说“无法执行二进制文件”。我运行命令:nasm-felf-ohelloworld.ohelloworld.asmsegment.datamsgdb"Hello,world!",10lenequ$-msgsegment.textglobal_start_start:moveax,4movebx,1movecx,msgmovedx,lenint80hmoveax,1movebx,0int80h这是我在汇编中的第一个程序,除了编译一些我没有使用ubuntu基本的C程序。我需要一些帮助谢谢大家。

linux - 绕行和 GCC 内联汇编 (Linux)

我正在为一个为(我们)模组提供API的游戏编写扩展程序。这个API提供了各种各样的东西,但它有一个限制。API仅适用于“引擎”,这意味着基于引擎发布的所有修改(mod)不提供/具有任何类型的(特定于模块的)API。我创建了一个“签名扫描器”(注意:我的插件作为共享库加载,使用-share和-fPIC编译)它可以找到感兴趣的功能(因为我在linux上很容易)。所以来解释一下,我举一个具体的例子:我找到了一个感兴趣的函数的地址,它的函数头很简单int*InstallRules(void);.它需要一个空(void)并返回一个整数指针(指向我感兴趣的对象)。现在,我想要做的是为我自己的函数创