远线程运行汇编代码

VB.NET 2008 写的代码,主要是前几天看人家写的VB6什么的代码,运行起来 不错,可改成VB.NET 2008一写,直接坏事了,在XP系统D325的U上跑的都挺好, 可放到VISTA系统TK55的本子上,VB6的还行,.NET的直接非法。针对这个,完整 重写了一下代码。

简单介绍步骤:

1、通过ID获取进程句柄,并替它申请一块内存:

'获取对方进程
RemoteProcess = Process.GetProcessById (PID)
'为对方进程申请4KB内存
AllocBaseAddress = VirtualAllocEx (RemoteProcess.Handle, 0, MEM_SIZE, MEM_COMMIT Or MEM_RESERVE, PAGE_EXECUTE_READWRITE)

2、构建汇编代码,这里分两种情况

A、添加代码

'添加整型
    Protected Sub AddInt2Code(ByVal Value As Integer)
        Dim bytes() As Byte = BitConverter.GetBytes(CInt (Value))    '获取字节内容
        Add2Memory(bytes, PtrAddressOffset)                          '写入参数堆栈
        PtrAddressOffset += 4                                        '堆栈位置指针向后移动
    End Sub
    '添加字节型
    Protected Sub AddByte2Code(ByVal Value As Byte)
        Dim bytes(0) As Byte
        bytes(0) = Value
        Add2Memory(bytes, PtrAddressOffset)
        PtrAddressOffset += 1
    End Sub

    '添加字节数组
    Protected Sub AddBytes2Code(ByVal Value As Byte())
        Add2Memory(Value, PtrAddressOffset)
        PtrAddressOffset += Value.Length
    End Sub

B、添加数据

Add2Memory(Value, ObjAddressOffset)             ' 将数据写入“数据区”
            Dim odata As New mData                           '记录每个数据(地址和长度)
            odata.prt = ObjAddressOffset + AllocBaseAddress
            odata.len = Value.Length
            DataArraylist.Add(odata)
            ObjAddressOffset += Value.Length                 '堆栈数据指针向后移动
            ObjAddressOffset += ObjAddressOffset Mod 4       '四字节对齐

时间: 2024-11-17 00:47:47

远线程运行汇编代码的相关文章

远线程运行API

继续前面一篇所写的--远线程调用ASM 在上一篇中的类的基础上,继承并发扬了一个类:远线程运行API,里面采用 的技术就是: 1.构造远线程调用代码及参数 2.通过线性搜索获取对方进程中的API入口地址 由于2是提取自一个以前的代码,并且调用API的函数中用了多个循环判定, 导致--效率低下的很呢 代码中关键部分就是: 1.E8后面偏移地址的计算:E8后面是相对地址-- 2.不同类型参数的处理:除了INTEGER以外,都"按指针"传递--调用时 采用了字节数组 3.参数反向压栈:注意一

解析四则表达式的编译过程及生成汇编代码

1.前序这是编译原理的实验,自认为是上大学以来做过的最难的一个实验. 实验用到的基础知识:C语言.数据结构.汇编(只需简单的了解). 开发工具:VC 2.问题描述编译整数四则运算表达式,将整数四则运算表达式翻译为汇编语言代码. 消除左递归后的文法: E→TE' E'→+TE' |ε T→FT' T'→*FT' |ε F→(E) | i 消除左递归后的翻译模式: E ::= T {E'.i:=T.nptr} E' {E.nptr:=E'.s} E'::= + T {E'1.i:=mknode('+

C语言中的数组和指针汇编代码分析实例

  这篇文章主要介绍了C语言中的数组和指针汇编代码分析实例,本文用一则C语言例子来得到对应的汇编代码,并一一注解每句汇编代码的含义,需要的朋友可以参考下 今天看<程序员面试宝典>时偶然看到讲数组和指针的存取效率,闲着无聊,就自己写了段小代码,简单分析一下C语言背后的汇编,可能很多人只注重C语言,但在实际应用当中,当出现问题时,有时候还是通过分析汇编代码能够解决问题.本文只是为初学者,大牛可以飘过~ C源代码如下: 代码如下: #include "stdafx.h" int

汇编语言-谁能帮我看一下汇编代码

问题描述 谁能帮我看一下汇编代码 ESE SEGMENT STRING DB 707 DUP (?) ESE ENDSCODE SEGMENT ASSUME ES:ESECS:CODESTART: MOV AXESE MOV ESAX LEA DXES:STRING+2 MOV AH0AH INT 21H MOV AL038H CLD MOV CL6 LEA DIES:STRING+2 REPNE SCASB MOV DL06H SUB DLCL ADD DL30H MOV AH02H INT

等待匿名线程-delphi xe中同时等待几个匿名线程,运行时结果错误(没cb了,无法悬赏)

问题描述 delphi xe中同时等待几个匿名线程,运行时结果错误(没cb了,无法悬赏) 我原本是想创建几个线程,同时写如数字在memo中.然后用waitformultipleobjects等待 全部线程全部完成后写入ok.可问题是运行后结果错误如下. (搞到了2cb,如何添加?) 1:等待不到结束线程.超时3秒过后写入ok.然后再写入数字. 2:原本我想写的应该是0-5的数字,可运行后基本是写入6最多. 代码如下.我该如何改?没cb了.请各位不吝赐教. var Testthread: TThr

HDFS源码分析心跳汇报之BPServiceActor工作线程运行流程

        在<HDFS源码分析心跳汇报之数据结构初始化>一文中,我们了解到HDFS心跳相关的BlockPoolManager.BPOfferService.BPServiceActor三者之间的关系,并且知道最终HDFS的心跳是通过BPServiceActor线程实现的.那么,这个BPServiceActor线程到底是如何工作的呢?本文,我们将继续HDFS心跳分析之BPServiceActor工作线程运行流程.         首先,我们先看下         那么,BPServiceA

C语言中的数组和指针汇编代码分析实例_C 语言

今天看<程序员面试宝典>时偶然看到讲数组和指针的存取效率,闲着无聊,就自己写了段小代码,简单分析一下C语言背后的汇编,可能很多人只注重C语言,但在实际应用当中,当出现问题时,有时候还是通过分析汇编代码能够解决问题.本文只是为初学者,大牛可以飘过~ C源代码如下: 复制代码 代码如下: #include "stdafx.h" int main(int argc, char* argv[]) {        char a=1;        char c[] = "

解析四则表达式的编译过程及生成汇编代码_C 语言

1.前序这是编译原理的实验,自认为是上大学以来做过的最难的一个实验.实验用到的基础知识:C语言.数据结构.汇编(只需简单的了解).开发工具:VC 2.问题描述编译整数四则运算表达式,将整数四则运算表达式翻译为汇编语言代码.消除左递归后的文法:E→TE'E'→+TE' |εT→FT'T'→*FT' |εF→(E) | i消除左递归后的翻译模式:E ::=     T    {E'.i:=T.nptr}E'    {E.nptr:=E'.s}E'::=      + T  {E'1.i:=mknod

java控制线程运行_java

1.线程的控制很常见,如文件传送到一半时,需要暂停文件传送,或终止文件传送,这实际上就是控制线程的运行. 2.线程有创建.可运行.运行中.阻塞.死亡5个状态. 创建:使用new运算符创建一个线程 可运行:使用start方法启动一个线程后,系统分配了资源 运行中状态:执行线程的run方法 阻塞:运行的线程因为某种原因停止继续运行 死亡状态:线程结束 3.传统方法的安全问题 Thread的stop(),suspend(),resume(),destroy()方法,因为不安全,可能造成死锁,已经不再使