程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在Linux x86 NASM中打印字符?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何在Linux x86 NASM中打印字符??

开发过程中遇到如何在Linux x86 NASM中打印字符?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何在Linux x86 NASM中打印字符?的解决方法建议,希望对你解决如何在Linux x86 NASM中打印字符?有所启发或帮助;

ecx应该包含一个指向char缓冲区开始的指针。因此,您必须将缓冲区存储在内存中。您可以执行以下操作:

@H_616_6@; Print 'A' character mov eax, 4 ; __NR_write from asm/unistd_32.h (32-bit int 0x80 ABI) mov ebx, 1 ; stdout fileno push 'A' mov ecx, esp ; esp Now points to your char mov edx, 1 ; edx should contain how many characters to print int 80h ; sys_write(1, "A", 1) ; return value in EAX = 1 (byte written), or error (-errno) add esp, 4 ; restore esp if necessary

您可以@H_694_3@mov byte [esp], 'A'或其他任何地址(如果可以的话)覆盖堆栈中的所有内容。

或者,您可以使用一个字符数组来section .rodata代替即时存储。

制作一个write()系统调用与const voID *bufARG是些小号(像'A')将使其返回-EFAulT,不打印任何东西。内核仍然必须检查指针,并且系统调用将返回错误,而不是在错误的指针上引发SIGSEGV。

包括返回值进行解码。

解决方法

我正在尝试使用面向x86 GNU / Linux体系结构的 @H_772_35@NASM 打印单个字符或数字。

这是我正在使用的代码:

@H_616_6@section .text global _start _start: ; Linux prinTing preparation mov eax,4 mov ebx,1 ; Print 'A' character mov ecx,'A' ; ecx should contain the value to print mov edx,1 ; edx should contain how many characters to print int 80h ; System exit mov eax,1 mov ebx,0 int 80h

但是,运行此代码不会打印任何内容。我究竟做错了什么?

大佬总结

以上是大佬教程为你收集整理的如何在Linux x86 NASM中打印字符?全部内容,希望文章能够帮你解决如何在Linux x86 NASM中打印字符?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。