windbg学习---a (Assemble)和.dvalloc

.dvalloc 命令使得Windows在目标进程中分配附加的内存

.dvalloc [OptionsSize 

Options
可以是任意多个下面的选项:
/b BaseAddress
指定内存分配开始的虚拟地址。但只是说在这段分配,不一定为开始地址,如:
0:000> .dvalloc /b 0x7eeeeeee 0x400
Allocated 10000 bytes starting at 7eee0000

0:000> !address 0x7eeeeeee 
 ProcessParametrs 002e1c28 in range 002e0000 0037e000
 Environment 002e0810 in range 002e0000 0037e000
    7eee0000 : 7eee0000 - 00010000
                    Type     00020000 MEM_PRIVATE
                    Protect  00000040 PAGE_EXECUTE_READWRITE
                    State    00001000 MEM_COMMIT
                    Usage    RegionUsageIsVAD

可以看到,起始地址在7eee0000
/r
在虚拟地址空间中保留该内存,但是并不实际分配物理内存。如果使用该选项,调试器会调用VirtualAllocEx 并将 flAllocationType 参数设置为MEM_RESERVE。如果没有使用该选项,则使用的值为MEM_COMMIT | MEM_RESERVE。查看Microsoft Windows SDK获取详细信息。
Size
指定要分配的内存的字节数大小。程序可用的内存等于Size,但是实际分配的内存可能会大一些,因为它总是页面大小的整数倍。






a (Assemble)

a 命令对指令助记符进行汇编,并将指令代码的结果放入内存。

语法

a [Address

参数

Address
指定用于放置结果代码的内存块的开始位置
这个指令非常好用,比如在7eee00000中写入call 函数
0:000> a 7eee0000

这时会出现一个input,然后可以使用指令助记符

7eee0000 call User32!MessageBoxA
call User32!MessageBoxA
7eee0005 

0:000> u 7eee0000
7eee0000 e80cea0cf8      call    USER32!MessageBoxA (76faea11)
7eee0005 0000            add     byte ptr [eax],al

又如直接写入汇编指令:
7eee0000 push eax
push eax
7eee0001 push ebx
push ebx
7eee0002 mov eax, ebx
mov eax, ebx
7eee0004 

0:000> u 7eee0000
7eee0000 50              push    eax
7eee0001 53              push    ebx
7eee0002 8bc3            mov     eax,ebx








原文地址:https://www.cnblogs.com/hgy413/p/3693401.html