小编Jes*_*ter的帖子

C#Reflection Assembly:getMethods()忽略构造函数

如标题所述.我尝试使用Bindingflags但它们似乎都没有工作:

Assembly assembly = Assembly.LoadFile(somePath);
foreach (var type in assembly.GetTypes())
            {
             foreach(var method in type.GetMethods())
             Console.WriteLine(method.Name);
            }
Run Code Online (Sandbox Code Playgroud)

c# reflection constructor .net-assembly

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

如何存储CS和IP地址(Intel 8086)?

我想将CS(代码段)和IP(指令指针)地址存储到任何可用的寄存器AX,BX,CX或DX中.是否有可能以某种方式访问​​当前的CS或IP值?

assembly tasm x86-16

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

调试器中观察到的ASM跳转指令不精确

我正在对OllyDbg中的应用程序进行一些内联​​修改,并注意到一些奇怪的行为.

这些是我写的指令,直接从调试器复制:

2005FE35   4C               DEC ESP
2005FE36   77 21            JA SHORT 2005FE59 ; 23 byte difference
Run Code Online (Sandbox Code Playgroud)

为了清楚起见,我只修改了操作码(4C 77 21); 其他一切都由OllyDbg自动解释,这就是我的困惑.该指令应该递减ESP寄存器,然后执行21个十六进制字节的条件跳转.但是,地址0x2005FE59和0x2005FE36之间的差异不是21 - 它是23!

使用21个十六进制字节值,我观察到看似不稳定的结果.

2005FE36   77 20            JA SHORT 2005FE58 ; 22 byte difference
2005FE36   77 19            JA SHORT 2005FE51 ; 1B byte difference
2005FE36   77 17            JA SHORT 2005FE4F ; 19 byte difference
Run Code Online (Sandbox Code Playgroud)

我指示向前跳转的十六进制字节数与地址偏移量不匹配; 它似乎永远都是2.

这里发生了什么?

x86 assembly reverse-engineering machine-code ollydbg

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

NASM将字节添加到寄存器ebx

有没有一种简单的方法可以让这个NASM代码段工作?

add ebx, byte [ebp-10+ecx]

我收到以下错误:error: mismatch in operand sizes.我想将内存地址[ebp-10+ecx]中的字节添加到ebx的最低有效字节.当然,ebx是一个4或8字节的寄存器,会导致错误.

x86 assembly nasm

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

我应该在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
查看次数

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
查看次数

gcc 5.3 内联汇编器错误?

我有这个 32 位代码:

unsigned long long load(volatile unsigned long long *target) {
   unsigned long long result;

   __asm__ __volatile__
       (
       "movl %%ecx, %%edx\n\t"
       "movl %%ebx, %%eax\n\t"
       "lock cmpxchg8b %0\n\t"
       "movl %%edx, 4%1\n\t"
       "movl %%eax, %1\n\t"
       : "+m" (*target)
       : "o" (result)
       : "eax", "ebx", "ecx", "edx", "memory", "cc"
       );
   return result;
}
Run Code Online (Sandbox Code Playgroud)

当使用 gcc 5.3 版本编译时,代码的尾部会生成以下汇编代码(为了清晰起见,稍作编辑):

lock cmpxchg8b (%esi)
movl %edx, 48(%esp)
movl %eax, 8(%esp)
movl    8(%esp), %eax
movl    12(%esp), %edx
Run Code Online (Sandbox Code Playgroud)

调用的结果cmpxchg8b位于 EDX:EAX 中。生成的代码将 EDX 存储在 48(%esp),从 12(%esp) 重新加载 …

x86 assembly gcc inline-assembly

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

movss操作码需要如何解释?

我在 Visual Studio IDE 的调试器上从 C++ 构建中获得了以下反汇编代码:

在此输入图像描述

根据我在movss指令上看到的内容,应该是

  1. F3 0F 10 /r MOVSS xmm1, xmm2 -- 将标量单精度浮点值从 xmm2 合并到 xmm1 寄存器。
  2. F3 0F 10 /r MOVSS xmm1, m32 - 将标量单精度浮点值从 m32 加载到 xmm1 寄存器。
  3. F3 0F 11 /r MOVSS xmm2/m32, xmm1 -- 将标量单精度浮点值从 xmm1 寄存器移至 xmm2/m32。

因此,虽然前 3 个字节很容易理解,但我不太理解其余的字节,例如05 6b 02 10 00第一行、44 24 38第二行等等。

你能帮我理解它们吗?05或44好像是/r?这是什么意思?

assembly x86-64 disassembly

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