草庐IT

IDA反汇编

全部标签

linux - 无法从汇编 (yasm) 代码调用 64 位 Linux 上的 C 标准库函数

我有一个功能foo用汇编编写并在Linux(Ubuntu)64位上使用yasm和GCC编译。它只是使用puts()将消息打印到标准输出,这是它的外观:bits64externputsglobalfoosection.datamessage:db'foo()called',0section.textfoo:pushrbpmovrbp,rspleardi,[relmessage]callputspoprbpret它被一个用GCC编译的C程序调用:externvoidfoo();intmain(){foo();return0;}构建命令:yasm-felf64foo_64_unix.asmg

linux - 无法从汇编 (yasm) 代码调用 64 位 Linux 上的 C 标准库函数

我有一个功能foo用汇编编写并在Linux(Ubuntu)64位上使用yasm和GCC编译。它只是使用puts()将消息打印到标准输出,这是它的外观:bits64externputsglobalfoosection.datamessage:db'foo()called',0section.textfoo:pushrbpmovrbp,rspleardi,[relmessage]callputspoprbpret它被一个用GCC编译的C程序调用:externvoidfoo();intmain(){foo();return0;}构建命令:yasm-felf64foo_64_unix.asmg

汇编中的 Linux 64 命令行参数

此描述适用于Linux32位:当Linux程序开始时,所有指向命令行参数的指针都存储在堆栈中。参数个数存放在0(%ebp),程序名存放在4(%ebp),参数从8(%ebp)开始存放。我需要64位的相同信息。编辑:我有显示如何使用argc、argv[0]和argv[1]的工作代码示例:http://cubbi.com/fibonacci/asm.html.globl_start_start:popq%rcx#thisisargc,mustbe2foroneargumentcmpq$2,%rcxjneusage_exitaddq$8,%rsp#skipargv[0]popq%rsi#get

汇编中的 Linux 64 命令行参数

此描述适用于Linux32位:当Linux程序开始时,所有指向命令行参数的指针都存储在堆栈中。参数个数存放在0(%ebp),程序名存放在4(%ebp),参数从8(%ebp)开始存放。我需要64位的相同信息。编辑:我有显示如何使用argc、argv[0]和argv[1]的工作代码示例:http://cubbi.com/fibonacci/asm.html.globl_start_start:popq%rcx#thisisargc,mustbe2foroneargumentcmpq$2,%rcxjneusage_exitaddq$8,%rsp#skipargv[0]popq%rsi#get

c - 从 C 语言转换为汇编语言时,以 null 结尾的字符串在哪里?

我做了两个程序输出两个字符串,一个用汇编,一个用C。这是汇编程序:.section.datastring1:.ascii"Hola\0"string2:.ascii"Adios\0".section.text.globl_start_start:pushl$string1callputsaddl$4,%esppushl$string2callputsaddl$4,%espmovl$1,%eaxmovl$0,%ebxint$0x80我用构建程序astest.s-otest.old-dynamic-linker/lib/ld-linux.so.2-otesttest.o-lc输出符合预期H

c - 从 C 语言转换为汇编语言时,以 null 结尾的字符串在哪里?

我做了两个程序输出两个字符串,一个用汇编,一个用C。这是汇编程序:.section.datastring1:.ascii"Hola\0"string2:.ascii"Adios\0".section.text.globl_start_start:pushl$string1callputsaddl$4,%esppushl$string2callputsaddl$4,%espmovl$1,%eaxmovl$0,%ebxint$0x80我用构建程序astest.s-otest.old-dynamic-linker/lib/ld-linux.so.2-otesttest.o-lc输出符合预期H

linux - 64 位 linux,汇编语言,问题?

我目前正在学习汇编语言。我正在使用Gas在LinuxMint(32位)。使用本书:ProgrammingfromtheGroundUp.我使用的机器有一个AMDTurion64bit处理器,但我仅限于2GB的RAM。我正在考虑将我的Linux安装升级到64位版本的LinuxMint,但我担心因为本书针对的是32位x86架构,所以代码示例无法运行。所以两个问题:代码示例是否可能存在任何问题?这里有没有人注意到使用64位Linux比使用32位Linux总体上有什么好处(我在StackOverflow上看到过一些与此有关的帖子,但它们主要与WindowsVista和WindowsXP相关。)

linux - 64 位 linux,汇编语言,问题?

我目前正在学习汇编语言。我正在使用Gas在LinuxMint(32位)。使用本书:ProgrammingfromtheGroundUp.我使用的机器有一个AMDTurion64bit处理器,但我仅限于2GB的RAM。我正在考虑将我的Linux安装升级到64位版本的LinuxMint,但我担心因为本书针对的是32位x86架构,所以代码示例无法运行。所以两个问题:代码示例是否可能存在任何问题?这里有没有人注意到使用64位Linux比使用32位Linux总体上有什么好处(我在StackOverflow上看到过一些与此有关的帖子,但它们主要与WindowsVista和WindowsXP相关。)

linux - at&t汇编中的 'push'和 'pushq'有什么区别

我最近开始寻求更深入地了解我的计算机的工作原理。我的问题是关于push和pushq之间的区别。我知道push向堆栈写入一个值,我的假设是pushq做类似的事情。q在那里的事实让我认为应该存在细微的差异,但我似乎无法理解差异。我声明在使用gdb和命令“layoutasm”调试文件/lib/udev/iphone-set-info时思考这个问题。有问题的代码是:pushq$0x0push%r9我知道$0x0是NULL的十六进制,而%r9是通用寄存器之一。这是否仅仅意味着将Nullus写入堆栈并在其上方写入寄存器%r9? 最佳答案 我不确

linux - at&t汇编中的 'push'和 'pushq'有什么区别

我最近开始寻求更深入地了解我的计算机的工作原理。我的问题是关于push和pushq之间的区别。我知道push向堆栈写入一个值,我的假设是pushq做类似的事情。q在那里的事实让我认为应该存在细微的差异,但我似乎无法理解差异。我声明在使用gdb和命令“layoutasm”调试文件/lib/udev/iphone-set-info时思考这个问题。有问题的代码是:pushq$0x0push%r9我知道$0x0是NULL的十六进制,而%r9是通用寄存器之一。这是否仅仅意味着将Nullus写入堆栈并在其上方写入寄存器%r9? 最佳答案 我不确