草庐IT

IDA反汇编

全部标签

linux - 如何调试需要用户输入的 NASM 汇编程序?

我正在阅读杰夫的精彩著作assemblystepbystep,我在第8章中展示了一个汇编程序示例,该程序以这种方式从用户那里获取文件:SECTION.bss;SectioncontaininguninitializeddataBUFFLENequ1024;LengthofbufferBuff:resbBUFFLEN;Textbufferitself它将文件文本读入Buff,并将该文本的一个版本全部大写输出到另一个文件。我想在Debug模式下运行这个程序来逐步分析所有寄存器发生了什么。我正在使用INSIGHT在ubuntu上运行它。我是一个完全的初学者。我知道如何使用Insight单步执

linux - 如何反汇编原始 MIPS 代码?

类似于HowdoIdisassemblerawx86code?,但是对于MIPS架构:如何使用objdump反汇编原始MIPS代码?我想查看vmlinux镜像中的说明,但现在我必须这样做::>x.cmipsel-linux-gnu-gcc-c-ox.ox.cmipsel-linux-gnu-objcopy--add-sectionraw=vmlinuxx.omipsel-linux-gnu-objcopy--remove-section.commentx.omipsel-linux-gnu-objdump-Dx.o|less有没有更简单的方法呢?我尝试了以下无济于事:mipsel-li

linux - 如果汇编程序中没有退出系统调用会怎样?

在汇编程序中,.text部分加载到0x08048000;.data和.bss部分紧随其后。如果我不在.text部分放置一个exit系统调用会发生什么?它会导致.data和.bss部分被解释为导致“不可预测”行为的代码吗?程序什么时候终止——可能是在每条“指令”执行完之后?我可以在没有exit系统调用的情况下轻松编写程序,但是我不会测试.data和.bss是否被执行不知道,因为我想我必须知道在后台生成的真实机器代码才能理解这一点。我认为这个问题更多的是关于“操作系统和CPU将如何处理这种情况?”比汇编语言,但对于汇编程序员等来说仍然很有趣。 最佳答案

Linux X86-64 汇编和 printf

我正在阅读一些linux汇编手册,发现了使用printf()函数的想法。出于调试原因,我需要它以二进制形式将寄存器值输出到终端,但现在我只是尝试用文本测试该功能。我被卡住了,因为当我使用pushq而不是pushl时出现段错误。如何更改此程序以输出字符串和二进制形式的寄存器?.datainput_prompt:.string"Hello,world!"printf_format:.string"%5d"printf_newline:.string"\n"size:.long0.text.globlmainmain:pushq$input_promptcallprintfmovl$0,%e

linux - 反汇编为 Intel 语法的 x86 ELF 反汇编程序

是否有在Linux上运行的反汇编程序能够将x86ELF可执行文件反汇编为Intel语法中的汇编代码(即操作目标寄存器、源寄存器;等)?输出反汇编器最好与NASM语法相当接近。objdump-d工作得很好,但输出的AT&T语法有时我觉得很难理解,而ndiasm仅反汇编我所知的二进制文件。 最佳答案 您可以告诉objdump使用Intel语法:objdump-Mintel-d 关于linux-反汇编为Intel语法的x86ELF反汇编程序,我们在StackOverflow上找到一个类似的问题

linux - 从 Linux 的核心转储中找到崩溃的汇编指令

如果我将崩溃程序和核心转储加载到gdb中,它会显示堆栈跟踪和崩溃点,如下所示。Corewasgeneratedby`./cut--output-d=:-b1,1234567890-/dev/fd/63'.ProgramterminatedwithsignalSIGSEGV,Segmentationfault.#0is_printable_field(i=1234567890)atsrc/cut.c:266266return(printable_field[n]>>(i%CHAR_BIT))&1;(gdb)bt#0is_printable_field(i=1234567890)atsrc

linux - 在适用于 Linux 的 Windows 子系统上的 Ubuntu 上使用 INT 0x80 汇编编译的可执行文件不产生输出

我一直在看汇编教程,我正在尝试运行一个helloworld程序。我在Windows上的Ubuntu上使用Bash。程序集如下:section.textglobal_start;mustbedeclaredforlinker(ld)_start:;tellslinkerentrypointmovedx,len;messagelengthmovecx,msg;messagetowritemovebx,1;filedescriptor(stdout)moveax,4;systemcallnumber(sys_write)int0x80;callkernelmoveax,1;systemcal

linux - 如何从汇编语言生成可执行文件?(在 emacs 中)

有人能告诉我如何从汇编语言生成可执行文件吗?我的环境是Ubuntu+Emacs+GCC为了学习的目的,我写了一些C代码(hello.c)并将其转换为汇编(hello.s)我想从一个汇编文件中生成一个可执行文件。我试过了M-xcompilegcchello.c-S从C代码编译和M-xcompileashello.s生成可执行文件但是只有一个.out文件,无法执行所以我试过了ashello.s-oaaa但是文件“aaa”不可执行 最佳答案 as的输出是一个目标文件。要使其可执行,您需要将其与ld链接,但您还需要链接它所依赖的任何对象,如

linux - 汇编子例程被调用两次,甚至没有从主程序中调用

我正在尝试定义一些在其中调用printf的子例程。一个非常简单的例子如下:externprintfLINUXequ80HEXITequ60section.dataintfmt:db"%ld",10,0segment.textglobalmainmain:callos_return;returntooperatingsystemos_return:movrax,EXIT;Linuxsystemcall60i.e.exit()movrdi,0;Errorcode0i.e.noerrorsintLINUX;InterruptLinuxkerneltest:pushrdipushrsimovr

linux - 为什么这里的 Solaris 汇编器生成的机器码与 GNU 汇编器不同?

我为amd64编写了这个小汇编文件。代码的作用对于这个问题并不重要。.globlfibfib:mov%edi,%ecxxor%eax,%eaxjrcxz1flea1(%rax),%ebx0:add%rbx,%raxxchg%rax,%rbxloop0b1:ret然后我开始在Solaris和Linux上组装然后反汇编它。太阳系$as-oy.o-xarch=amd64-Vy.sas:SunCompilerCommon12.1SunOS_i386Patch141858-042009/12/08$disy.odisassemblyfory.osection.text0x0:8bcfmovl%e