Articles of nasm

汇编代码自动运行一个terminal命令

最近,我写了一些需要input密码的汇编代码,如果用户input正确的密码作为内部存储的,则输出“正确!”。 否则,打印出“不正确!”。 这里是代码: section .text global _start _start: mov edx, len_whatis mov ecx, whatis mov ebx, 1 mov eax, 4 int 80h ; outputs: "What is the password?" mov edx, 5 ; expect 5 bytes of input(so 4 numbers) mov ecx, pass mov ebx, 0 mov eax, 3 int 80h ; accepts intput and stores […]

accept()不会阻止程序的执行

我开始用asm(NASM)编程networking程序,技术上,接受function阻止程序(被动套接字)。 那么,在我的程序中,我执行程序和程序完成。 我已经testing了积压为1(听function),但这不是问题…会发生什么? BITS 32 section .text global _start _start: ; Create the socket file descriptor ; int socket(int domain, int type, int protocol); mov eax, 102 ; __NR_socketcall mov ebx, 1 ; socketcall type (socket) ; socket parameters push 0 ; IPPROTO_TCP push 1 ; SOCK_STREAM push 2 ; AF_INET int 0x80 ; socket(AF_INET, […]

汇编简单的I / O代码。 诠释为string错误

我已经提出了一个问题,人们指着我一个整数的string转换。 反之亦然。 我现在只是复制它,所以我可以看看我的程序是否工作,稍后我会尝试写我自己的。 但是有一个问题,我找不到我犯的错误。 在最后一次input之后,程序总是以分段错误退出。 我试图删除int到string转换,只显示input的值,它的工作。 所以我一定是做了错误的转换。 这是我的第一个程序之一,我真的需要明白为什么它不会工作如果我想进一步发展。 谢谢。 这是我的代码: section .text global _start _start: mov edx, lenask mov ecx, ask mov ebx, 1 mov eax, 4 int 0x80 mov edx, 5 mov ecx, input mov ebx, 0 mov eax, 3 int 0x80 mov edx, lenask2 mov ecx, ask2 mov ebx, 1 mov eax, 4 […]

尝试执行二进制文件时出现“没有这样的文件或目录”错误

我在Ubuntu上使用NASM汇编程序。 我试图执行这个代码: section .data fmt db "%d",0 val1 dd 23 val2 dd 9 val3 dd 7 section .text global _start extern printf _start: push val1 push val2 push val3 pop rax pop rbx imul rax, rbx push rax pop rax pop rbx add rax, rbx push rax pop rax mov [val1], rax push val1 push […]

在汇编器中插入sorting不起作用

我必须在NASM中做插入sorting的数字。 我有一个文件,它会生成随机数字,并以二进制forms生成带有数字的输出文件。 我的程序加载这个作为input文件,应该给输出数字sorting使用插入sorting,也是二进制forms。 我的代码: ; Template assembler source file section .text global _start _start: ; put your code here mov eax, 3 mov ebx, 0 mov ecx, array mov edx, 4*32768 int 80h mov [fileLength], eax shr eax,2 dec eax mov [number], eax mov ebx, 1 outerloop: mov ecx,[array + 4*ebx] mov [item],ecx mov ecx,ebx […]

离开指令返回一个seg错误

我有一个例程,执行一个例程的值到ebp寄存器的值预计。我在例程中多次改变。所以,我不能这样做: mov ebp,esp在代码顶部。我试着保存在另一个寄存器中的esp地址,并在leave指令之前,把这样的地址进入ebp但我仍然得到segmentaion故障。 如何解决这个问题? 代码是非常巨大的(在这里发布,但我可以发布如果需要),但是这个想法是这样的: ;a lot of arguments are passed in stack foo: xor ebx,ebx mov ecx,esp loop0: sub edx,1 jz end ;etc mov eax,[esp+ebx] mov ebp,eax call routinex ;etc.. ;… mov ebp,edx call printx add ebx,4 jmp loop0 end: mov ebp,ecx leave ret 我希望这个代码就足以让你明白了。我也喜欢解释。

在Linux上的汇编编译器。 Nasm还是AS?

我不确定这是转发还是其他什么,但我会问:P 在Linux中,我可以用GCC编译C代码。 我可以用NASM编译asm代码。 但是,当我使用nasm创build输出文件时: nasm -f elf something.asm -o objfile这会创build一个目标文件(对吧?),但是我不能明显运行。 所以,我所做的就是使用gcc和nasm。 我有objfile,然后“链接?” 用gcc:gcc objfile -o可执行文件 问题:做一个简单的C使用gcc和其他程序与nasm有什么区别? 可执行文件的大小:(他们有完全一样的东西) -rw-r–r– 1 int3 int3 280 Out 11 19:22 asm.asm -rwxr-xr-x 1 int3 int3 7330 Out 11 19:22 ASMprogram -rw-r–r– 1 int3 int3 50 Out 11 19:08 cc -rwxr-xr-x 1 int3 int3 7294 Out 11 19:14 Cprogram -rw-r–r– 1 […]

Linux x86-64 Hello World并注册使用参数

我发现这个页面在Linux上有一个适用于x86-64的Hello World示例: http://blog.markloiseau.com/2012/05/64-bit-hello-world-in-linux-assembly-nasm/ ; 64-bit "Hello World!" in Linux NASM global _start ; global entry point export for ld section .text _start: ; sys_write(stdout, message, length) mov rax, 1 ; sys_write mov rdi, 1 ; stdout mov rsi, message ; message address mov rdx, length ; message string length syscall ; sys_exit(return_code) mov rax, 60 […]

系统调用如何在x86汇编linux中解释

我很困惑为什么/如何在x86环境中打印一个值在Linux环境中。 例如,如果我想打印一个值,我会这样做: mov eax, 4 mov ebx, 1 mov ecx, msg mov edx msgLength int 80h 现在我明白数值4会使中断后系统调用sys_write。 但是我的问题是,4的意义是什么? 它是否将十进制值4的地址加载到eax ? 或者是它加载到eax寄存器的值4? 阅读后我感到困惑,我可以使用以下指令将地址处的值传送到寄存器: mov eax, [msg] eax现在将包含msg地址的字节,但是我猜这个格式是不可接受的: mov eax, [4] 那么当我将4转换成eax来打印某些内容时,究竟发生了什么?

在Linux机器上创build并testingx86-64 ELF可执行shellcode

我正在创build缓冲区溢出和堆栈/堆攻击的培训。 我正在使用Ubuntu 12.04 x86_64计算机,并希望展示一些示例buggy程序以及可以利用这些漏洞的方法。 我试图从迄今为止发现的最基本的shellcode开始,简单的退出调用,应该退出程序溢出。 因此exitcall.asm : ;exitcall.asm [SECTION .text] global _start _start: xor ebx,ebx ; zero out ebx, same function as mov ebx,0 mov al, 1 ; exit command to kernel int 0x80 但是,我已经从其他教程中获得了这个asm文件,这些文件是为i386体系结构编写的。 接下来要做的是生成一个目标文件并将其设置为二进制可执行文件: # nasm -f elf64 exitcall.asm # ld -o exitcall exitcall.o # file exitcall exitcall: ELF 64-bit LSB executable, x86-64, […]