小编Jes*_*ter的帖子

我应该在x86程序集中初始化寄存器吗?

我正在尝试解决这个问题:

假设您在eax,ebx,ecx中获得了值.编写在所有寄存器中添加值的代码,并将最终结果存储在edx中.

我的代码:

mov eax,3
mov ebx,4
mov ecx,1
add edx,eax
add edx,ebx
add edx,ecx
Run Code Online (Sandbox Code Playgroud)

我是否必须初始化寄存器edx(mov edx,0)?

x86 assembly

0
推荐指数
1
解决办法
1534
查看次数

执行shellcode分段错误

我编译了一个基本的漏洞利用(基本上,C中的源代码没有任何用处,只需执行执行Bash的操作码).问题是当我执行二进制文件时:"分段错误".

在这里我做了什么:

executeBash.asm(NASM)

section .text
global _start
_start:
xor EAX, EAX           ; EAX = 0
push EAX               ; "\0\0\0\0"
push DWORD 0x68732F2F  ; "//sh"
push DWORD 0x6E69622F  ; "/bin"
mov EBX, ESP           ; arg1 = "/bin//sh\0"
push EAX     ; NULL -> args[1]
push EBX     ; "/bin//sh\0" -> args[0]
mov ECX, ESP ; arg2 = args[]
mov AL, 0X0B ; syscall 11
int 0x80     ; excve("/bin//sh", args["/bin//sh", NULL], NULL)
Run Code Online (Sandbox Code Playgroud)

在终端:

prompt$ nasm -f elf32 executeBash.asm
prompt$ ld -m elf_i386 executeBash.o -o …
Run Code Online (Sandbox Code Playgroud)

c linux x86 assembly gcc

0
推荐指数
1
解决办法
1670
查看次数

汇编语言中的模式

.model small
.stack 100h
.Data 
 count word 0
.code
 main proc

   mov cx,5
  mov al,40h
   mov ah,2
  mov bx,0


first :
    mov count,cx

   inc bx
   inc al
   mov cx,bx


second :
    mov dl,al
    int 21h 



   loop second
   mov cx ,count
    mov dx,13
    mov ah,2
    int 21h 
     mov dl,10
     mov ah,2
     int 21h
     loop first
    mov ax,4c00h
    int 21h

  main endp
  end main
Run Code Online (Sandbox Code Playgroud)

我写了这段代码并期待像这样的输出

一个
BB
CCC
DDDD
EEEEE

但得到这个输出

一个
00
000
0000
00000

任何人都可以解决这个代码中的问题,当我删除行代码行提供输出

ABBCCCDDDDEEEE

x86 assembly dos

0
推荐指数
1
解决办法
1083
查看次数

为什么在R8至R15中不使用高字节?

我想问为什么我们要处理R8到R15中的低字节,为什么不使用高字节?我们可以使用低字节但不可以使用高字节

assembly x86-64 machine-code cpu-registers

0
推荐指数
1
解决办法
831
查看次数

C缓冲区溢出攻击

我的CS课程中有一个以缓冲区溢出攻击为中心的项目.

我很难完全理解这个话题.

说我有以下功能:

08048cc5 <getbuf>:
 8048cc5:   55                      push   %ebp
 8048cc6:   89 e5                   mov    %esp,%ebp
 8048cc8:   83 ec 38                sub    $0x38,%esp
 8048ccb:   8d 45 d8                lea    -0x28(%ebp),%eax
 8048cce:   89 04 24                mov    %eax,(%esp)
 8048cd1:   e8 32 01 00 00          call   8048e08 <Gets>
 8048cd6:   b8 01 00 00 00          mov    $0x1,%eax
 8048cdb:   c9                      leave
 8048cdc:   c3                      ret
Run Code Online (Sandbox Code Playgroud)

目前它返回此功能:

08048c53 <test>:
 8048c53:   55                      push   %ebp
 8048c54:   89 e5                   mov    %esp,%ebp
 8048c56:   83 ec 28                sub    $0x28,%esp
 8048c59:   e8 63 04 00 00          call …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly buffer buffer-overflow

0
推荐指数
1
解决办法
453
查看次数

XMM寄存器0未被使用

在Intel x64手册中,它表示在32位SSE2模式下XMM寄存器为0-7.为什么95%使用这些寄存器的指令跳过0并使用1-4?

x86 assembly sse

-1
推荐指数
1
解决办法
81
查看次数

为什么"sub esp,96","lea eax,[esp + 16]"和"mov [esp + 4],eax"?(asm intel语法)

我正在尝试通过GNU在IDA的帮助下创建的逆向工程汇编代码来学习汇编(Intel语法).我很难理解汇编中对内存地址的引用,如果有人可以评论下面的代码并解释实际发生的事情,我将非常感激.

这是以下C程序:

#include <stdio.h>

int main(void)
{
    char *input[20];

    scanf("%s", &input);
    printf("%s", input);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用Intel语法进行汇编:

push    ebp
mov     ebp, esp

and     esp, -16
sub     esp, 96                             ; char *input[20]

                                            ; scanf("%s", &input)
lea     eax, [esp+16]                       ; move the effective address of [esp+16] into EAX
mov     [esp+4], eax                        ; &input
mov     dword ptr [esp], offset aS          ; %s
call    _scanf

                                            ; printf("%s", input)
lea     eax, [esp+10]                       ; move the effective address of [esp+10] into EAX
mov     [esp+4], eax                        ; …
Run Code Online (Sandbox Code Playgroud)

x86 assembly

-3
推荐指数
1
解决办法
192
查看次数

标签 统计

assembly ×7

x86 ×6

c ×2

buffer ×1

buffer-overflow ×1

cpu-registers ×1

dos ×1

gcc ×1

linux ×1

machine-code ×1

sse ×1

x86-64 ×1