Articles of nasm

我怎样才能在我的64位机器上用gcc编译一个32位的.o文件?

试图学习NASM大会。 我有一个64位的机器,与Ubuntu。 最近我决定testingpush和pop指令。 我这样做: nasm -felf64 Test.asm 显然,它们在64位模式下不受支持。 好的,没问题,我只要做32就可以了: nasm -felf Test.asm 而现在,一如既往, gcc Test.o 但现在告诉我 i386 architecture of input file 'Test.o' is incompatible with i386:x86-64 output 我不太明白这里的错误。 如何在我的64位机器上testingpush和pop ,如果显然我不能编译32位程序?

nasm汇编linux定时器或睡眠

我试图find一种方法来让我的代码等待两秒钟,然后再继续。 我在保护模式下使用Linux的nasm,所以我只能使用int 80h。 我发现了一个称为“ alarm ”(27)的syscall调用,另一个叫做“ pause ”(29)。 但是,当我尝试使用这些,程序等待并结束,而不是继续执行。 我还发现了另一个syscall ,sigaction,它改变了信号的行为(所以我认为它可以用来使程序忽略由报警产生的信号,而不是退出),但我不太了解sigaction如何工作。 谢谢你的帮助。 有用的链接: http : //man7.org/linux/man-pages/man2/alarm.2.html http://man7.org/linux/man-pages/man2/sigaction.2.html

将Linux x86-64程序集hello world程序与ld链接失败

我一直在最近在linux上玩x86 64位程序集,然后在编译一个看起来很简单的程序后,我留下了我的脑袋:P 虽然我编译和链接它没有引发错误,并产生一个Linux ELF当我尝试运行它,我得到: .:[ h4unt3r@sp3ctr4l-h0st asm ]:. #(0)> ./hello bash: ./hello: No such file or directory 我假设它产生一个无效的ELF文件,这就是为什么它报告你不在那里,即使它是。 不知道为什么 – 我可能会继续玩它,只是好奇,如果这可以轻松解决^ _ ^ 这是我的编译/链接命令行: nasm -f elf64 hello.s -g ld -o hello hello.o -lc 这里是代码: section .data msg: db "Hello, world!",0xa,0 section .text extern printf global main main: push rbp mov rbp, rsp mov rdi, […]

int 0x80是否覆盖寄存器值?

我写了一个程序,它应该像while循环一样,打印一定数量的文本string。 这里是代码: global _start section .data msg db "Hello World!",10 ; define the message msgl equ $ – msg ; define message length ; use minimal size of storage space imax dd 0x00001000 ; defines imax to be big! section .text _start: mov r8, 0x10 ; <s> put imax in r8d, this will be our […]

部件! 我不能让循环退出?

我不知道为什么我的程序进入一个无限循环,当我想要在ecx的值等于0时退出? 请帮忙? section .data ;get external functions extern printf global main main: ;set up stack frame push rbp mov rbp, rsp ;if(x<y) ;print x is less ;else ;print y is larger than x ;mov values into register to compare them mov rax,[x] mov rbx,[y] cmp rax,rbx ;cmp x,y jg .x_is_greater lea rdi,[y_less] xor eax,eax ;must […]

NASM 32位:通过printf打印注册内容

我是新来的组装。 我有不同的输出,从我所期望的简单的代码。 每次在printf被调用之前, eax内容都会被右移一些数字。 我究竟做错了什么? 谢谢。 码: ;file name : testing.asm ;assemble and link with: ;nasm -f elf testing.asm && gcc -m32 -o testing testing.o extern printf ; the C function, to be called SECTION .data ; Data section, initialized variables a: dd 15 ; int a=15 str: db "content in eax=%d", 10, 0 SECTION […]

如何在汇编语言中使用errno打印错误消息

我正在使用sys_write系统调用写入汇编语言的stdout ,如果在写入期间发生错误,然后正常退出,我想要打印一条错误消息。 我只能退出,但无法使用errno和perror打印错误消息。 任何build议如何处理如果syscall失败的错误。 我想根据发生的错误types打印错误信息。 我在Ubuntu 14.04上 ,我正在使用nasm编译我的汇编代码。 目前我只做这个: test rax,rax ; Lets make sure the file descriptor is valid js skipWrite ;

使用gcc -m32标志找不到-lgcc和-lgcc_s

我想在我的64位Linux上编译一个32位汇编代码(NASM),但我不能,我已经尝试了其他的教程,并且我安装了ia32-libs … 当我尝试运行它为: gcc asm1.o -o asm1 文件input“asm1.o”的i386与输出i386:x86-64不兼容 当我尝试运行它: gcc -m32 asm1.o -o asm1 / usr / bin / ld:无法find-lgcc / usr / bin / ld:connot查找-lgcc_s collect2:错误:ld返回1退出状态 感谢您的帮助。 OBS:对不起我的英文,我不是来自美国。

比较字符和Intel x86_64程序集

我是新assembly(英特尔x86_64),我试图从C库重新编码一些function。 我在一个64位的Linux上编译NASM 。 我有一个strchr函数的错误,我找不到解决scheme… 作为strchr手册页的一个提示, char * strchr(const char * s,int c); strchr()函数返回一个指向strings中第一个出现的字符c的指针。 这是我试过的: strchr: push rpb mov rbp, rsp mov r12, rdi ; get first argument mov r13, rsi ; get second argument call strchr_loop strchr_loop: cmp [r12], r13 ; **DON'T WORK !** check if current character is equal to character given in parameter… […]

输出数据寄存器值在NASM

新人在这里,我已经有一个问题。 我正在修改Jeff Duntemann的汇编书籍中使用的示例代码,我想打印出存储在数据寄存器中的整数值给terminal? 下面的代码是下面的代码,它打印出来的string好吧,在ECX中推送值没关系,但是当它到达以下内容: pop ecx mov eax,4 mov ebx,1 mov edx, ecx int 80h 它不会在terminal上显示edx的内容,但我想我已经告诉过mov eax,4等了。 任何人都可以给我任何“指示”(双关语)? 供参考的代号(于2012年6月17日修订): SECTION .data submessage: db "I am subtracting 5 from 10!", 10 msglen: equ $-submessage ansmsg: db "Answer is:", 10 msglen2: equ $-ansmsg EOL: db 10 SECTION .bss msg: resd 2 ; reserve space for 2 dwords […]