草庐IT

IDA汇编

全部标签

linux - 如何在 x86 汇编中调用 fgets?

根据thedocumentationforfgets(),该函数接受三个参数:char*-将保存输入的字符串int-一个整数,表示要读取的最大字符数FILE*-要读取的流的FILE*我调用这个函数没有问题。我只是将三个参数压入堆栈,调用函数,并将ESP增加12。我的问题是参数#3。什么应该作为标准输入的FILE*传递?在C中,我只能使用stdin,但我不知道x86汇编中的等价物是什么。更新:我在Linux上使用NASM。 最佳答案 stdin的问题在于,它是一个宏,不仅可以扩展为特定于平台的内容,而且很可能难以从汇编中手动访问。如果

linux - 如何在 x86 汇编中调用 fgets?

根据thedocumentationforfgets(),该函数接受三个参数:char*-将保存输入的字符串int-一个整数,表示要读取的最大字符数FILE*-要读取的流的FILE*我调用这个函数没有问题。我只是将三个参数压入堆栈,调用函数,并将ESP增加12。我的问题是参数#3。什么应该作为标准输入的FILE*传递?在C中,我只能使用stdin,但我不知道x86汇编中的等价物是什么。更新:我在Linux上使用NASM。 最佳答案 stdin的问题在于,它是一个宏,不仅可以扩展为特定于平台的内容,而且很可能难以从汇编中手动访问。如果

linux - 如何反汇编系统调用?

我怎样才能反汇编系统调用,以便我可以得到其中涉及的汇编指令 最佳答案 好吧,你可以做这样的事情。假设我想获取“dup”的程序集转储:这样写:#include#includeintmain(){returndup(0)}编译它:gcc-osystest-g3-O0systest.c转储它:objdump-dsystest在“main”中我看到了:400478:55push%rbp400479:4889e5mov%rsp,%rbp40047c:bf00000000mov$0x0,%edi400481:b800000000mov$0x0,

linux - 如何反汇编系统调用?

我怎样才能反汇编系统调用,以便我可以得到其中涉及的汇编指令 最佳答案 好吧,你可以做这样的事情。假设我想获取“dup”的程序集转储:这样写:#include#includeintmain(){returndup(0)}编译它:gcc-osystest-g3-O0systest.c转储它:objdump-dsystest在“main”中我看到了:400478:55push%rbp400479:4889e5mov%rsp,%rbp40047c:bf00000000mov$0x0,%edi400481:b800000000mov$0x0,

c - 有什么办法可以分析x86汇编源码中寄存器 "type"吗?

所以基本上我要做的是在我对汇编代码的分析任务中区分数据和内存地址。这是一个我很难处理的例子。假设我们在.data部分声明了一个变量val。0x0804805401000000这里是反汇编ELF文件的一行汇编代码。mov$0x08048054,%eax所以这可能是变量val的间接引用,如下所示:mov$0x8048054,%eaxmov%edx,0x4(%esp)mov%eax,(%esp)callprintf然后我会将$0x8048054转换为变量名val,如下所示:movval,%eaxmov%edx,0x4(%esp)mov%eax,(%esp)callprintf但还有另一种情况

c - 有什么办法可以分析x86汇编源码中寄存器 "type"吗?

所以基本上我要做的是在我对汇编代码的分析任务中区分数据和内存地址。这是一个我很难处理的例子。假设我们在.data部分声明了一个变量val。0x0804805401000000这里是反汇编ELF文件的一行汇编代码。mov$0x08048054,%eax所以这可能是变量val的间接引用,如下所示:mov$0x8048054,%eaxmov%edx,0x4(%esp)mov%eax,(%esp)callprintf然后我会将$0x8048054转换为变量名val,如下所示:movval,%eaxmov%edx,0x4(%esp)mov%eax,(%esp)callprintf但还有另一种情况

linux - 汇编中系统调用的返回值是什么?

当我尝试研究内核系统调用的返回值时,我找到了描述它们的表,以及我需要在不同的寄存器中放入什么才能让它们工作。但是,我没有找到任何说明的文档。什么是我从系统调用中得到的返回值。我只是在不同的地方发现我收到的将在EAX寄存器中。TutorialsPoint:TheresultisusuallyreturnedintheEAXregister.汇编语言循序渐进:JeffDuntemann所著的Linux编程一书在他的程序中多次说明:Lookatsys_read'sreturnvalueinEAXCopysys_readreturnvalueforsafekeeping我拥有的任何网站都没有解

linux - 汇编中系统调用的返回值是什么?

当我尝试研究内核系统调用的返回值时,我找到了描述它们的表,以及我需要在不同的寄存器中放入什么才能让它们工作。但是,我没有找到任何说明的文档。什么是我从系统调用中得到的返回值。我只是在不同的地方发现我收到的将在EAX寄存器中。TutorialsPoint:TheresultisusuallyreturnedintheEAXregister.汇编语言循序渐进:JeffDuntemann所著的Linux编程一书在他的程序中多次说明:Lookatsys_read'sreturnvalueinEAXCopysys_readreturnvalueforsafekeeping我拥有的任何网站都没有解

【汇编】源操作数寻址方式

MOV,AX,BX:BX是源操作数,AX是目的操作数以下均针对源操作数来分类1.立即寻址MOVAX,1002.直接寻址MOVAX,[100]3.寄存器寻址操作数在寄存器中MOVAX,BX4.寄存器间接寻址操作数在存储器中,有效寄存器为:BX,SI,DI,BPMOVAX,[BX]5.寄存器相对寻址操作数在存储器中,格式为基址BXBP或者变址DISI+偏移量比如:MOVAX,[BX+100]6.基址加变址存储方式操作数在存储器中,格式为基址BX/BP+变址DI/SIMOVAX,[BX+DI]7.相对基址加变址寻址操作数在存储器中,格式为基址+变址+偏移量MOVAX,[BX+SI+1000H]MOV

c - 来自 GCC 内联汇编的系统调用

这个问题在这里已经有了答案:Howtoinvokeasystemcallviasyscallorsysenterininlineassembly?(2个答案)关闭3年前。是否可以使用内联汇编block中的系统调用来编写单个字符?如果是这样,如何?它应该看起来像这样“东西”:__asm____volatile__("movl$1,%%edx\n\t""movl$80,%%ecx\n\t""movl$0,%%ebx\n\t""movl$4,%%eax\n\t""int$0x80\n\t":::"%eax","%ebx","%ecx","%edx");$80在ascii中是“P”,但不返回任