在汇编语言中,我们有DOS中断INT 21h,它不是硬件中断.
我想知道是否可以编写自己的中断并调用它.
如果可能,请建议链接或方法.
你怎么能强行改变CS
和IP
无论是在汇编语言?
ORG
指令可以用来改变数量IP
,但你怎么改变CS
?
基本上我想用汇编实现多线程.
许多论坛,包括堆栈溢出问题都说不可能,但那么C有多线程选项,即使是汇编代码也是如此?
void update_memblock(MEMBLOCK *mb)
{
static unsigned char tempbuf[128 * 1024];
SIZE_T bytes_left;
SIZE_T total_read;
SIZE_T bytes_to_read;
SIZE_T bytes_read;
bytes_left = mb->size;
total_read = 0;
while (bytes_left)
{
bytes_to_read = (bytes_left > sizeof(tempbuf)) ?
sizeof(tempbuf) : bytes_left;
ReadProcessMemory(mb->hProc, mb->addr + total_read,
tempbuf, bytes_to_read, &bytes_read);
if (bytes_read != bytes_to_read) break;
memcpy(mb->buffer + total_read, tempbuf, bytes_read);
bytes_left -= bytes_read;
total_read += bytes_read;
}
mb->size = total_read;
}
Run Code Online (Sandbox Code Playgroud)
这是我当前的代码,我最初正在阅读另一个进程'内存使用ReadProcessMemory
.现在我存储了临时数据tempbuf
.我能够以tempbuf
十六进制形式输出数据.但是我打算如图所示显示它,另外我在这里遇到的另一个复杂因素是bytes_left> sizeof(tempbuf)我只读取相当于tempbuf大小的足够数据.如何读取更多数据,因为我定义的数组只能支持尽可能多的数据?
我试图读取某些进程的内存,如csrss.exe使用OpenProcess()
.问题是,一旦我使用PROCESS_ALL_ACCESS
这些进程就无法打开.所以我尝试使用PROCESS_QUERY_LIMITED_INFORMATION
参数,但不会获得多汁的结果.
根据我对系统的理解,这个功能最终会调用ZwOpenProcess()
.我目前的理解是,如果应用程序在用户模式下访问它,则此调用也将被视为来自用户模式而不是内核模式的调用.
为了绕过这个检查,我做了以下事情:
ntdll.dll
所有这些进程所在的位置.
所以再次从我的理解,它执行测试,然后如果它评估为0,它执行低延迟系统调用,我相信这是函数的内核模式版本.
接下来我做了同样的事情ZwReadVirtualMemory()
:
所以这是我的问题:
PROCESS_ALL_ACCESS
如果我使用上述方法调用它们,将适用于这些例程.VirtualQueryEx()
我找不到内核模式替换,在这种情况下,我打算VirtualQueryEx()
与上面提到的自定义调用一起使用.现在我的问题是,因为VirtualQueryEx()
不是内核模式调用(至少在顶部,我的意思是ReadProcessMemory()
调用ZwReadVirtualMemory但是如果由用户模式程序启动则不是内核模式调用,情况也是如此VirtualQueryEx()
),这是一个问题,还是在我进行下一次自定义调用时会恢复到用户模式?我自己做这一切的最终目标是能够使用内核级特权打开所有进程,读取内存并将其转储到文件中.这还包括在系统级运行的进程,如csrss.exe.如果存在任何更简单的方法,请用同样的方式启发我.
Code :
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
HANDLE lProc = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid);
DWORD error = GetLastError();
if (hProc || lProc)
{
//(!hProc && lProc) ? printf("lproc") : printf("hProc"); //Testing Condition
fProc = (!hProc && lProc) ? lProc : hProc;
while (1) {
if …
Run Code Online (Sandbox Code Playgroud) 我正在使用unsigned long long int来存储文件中的字符数.而且我很害怕它的范围很快就会被绕过.是另一种数据类型,它可以保存多于unsigned long long int的值吗?
我还需要2个unsigned long long int数组来存储指向文件中某些位置的指针.但是,我可以在一个数组中拥有的最大元素数是10000.有没有办法获得更多?