VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: 炉子

新写的taskmgr

[复制链接]
发表于 2007-9-12 14:32:30 | 显示全部楼层
炉子大师,放点结束进程那个代码出来嘛
回复 支持 反对

使用道具 举报

发表于 2007-9-12 17:26:00 | 显示全部楼层
多问一句关于内存读写这个功能,是不是直接读内存
如果是的话,是否是直接从app.hinst 读?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-16 09:04:42 | 显示全部楼层
用readvirtualmem读
回复 支持 反对

使用道具 举报

发表于 2007-9-18 16:50:21 | 显示全部楼层
readvirtualmem 从哪读到哪?
有没试验过:
copymemory byte(0),byval app.hinstance,XX

取得一个映象在内存的长度怎么弄?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-22 14:00:32 | 显示全部楼层
从txtStartAddr.txt开始读-。-
长度的话读peb_ldr_data可以算作是一种方法
回复 支持 反对

使用道具 举报

发表于 2007-9-22 19:31:47 | 显示全部楼层
原帖由 炉子 于 2007-9-22 14:00 发表
长度的话读peb_ldr_data可以算作是一种方法


3..
对这些东西研究不多,能不能提供个简单的代码,或者说下大概什么意思
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-22 20:07:27 | 显示全部楼层

Public Type LIST_ENTRY
        FLink
As Long
        
BLink As Long
End
Type

Public Type LDR_MODULE
        InLoadOrderModuleList
As LIST_ENTRY
        InMemoryOrderModuleList
As LIST_ENTRY
        InInitializationOrderModuleList
As LIST_ENTRY
        BaseAddress
As Long
        
EntryPoint As Long
        
SizeOfImage As Long
        
FullDllName As UNICODE_STRING
        BaseDllName
As UNICODE_STRING
        Flags
As Long
        
LoadCount As Integer
        
TlsIndex As Integer
        
HashTableEntry As LIST_ENTRY
        TimeDateStamp
As Long
End
Type

Public Type PEB_LDR_DATA
        Length
As Long ' : Uint4B
        
Initialized As Byte
        
SsHandle As Long ' : Ptr32 Void
        
InLoadOrderModuleList As LIST_ENTRY  '//链表中的每一个指针都指向一个LDR_MODULE结构
        
InMemoryOrderModuleList As LIST_ENTRY
        InInitializationOrderModuleList
As LIST_ENTRY
        EntryInProgress
As Long ' : Ptr32 Void
End Type

Public Type PEB
        InheritedAddressSpace
As Byte
        
ReadImageFileExecOptions As Byte
        
BeingDebugged As Byte
        
SpareBool As Byte
        
Mutant As Long
        
ImageBaseAddress As Long
        
pLdr As Long ' _PEB_LDR_DATA
        
ProcessParameters As Long ' _RTL_USER_PROCESS_PARAMETERS
        
SubSystemData As Long
        
ProcessHeap As Long
        
FastPebLock As Long ' _RTL_CRITICAL_SECTION
        
FastPebLockRoutine As Long
        
FastPebUnlockRoutine As Long
        
EnvironmentUpdateCount As Long
        
KernelCallbackTable As Long
        
SystemReserved(1 To 1) As Long
        
AtlThunkSListPtr32 As Long
        
FreeList As Long ' _PEB_FREE_BLOCK
        
TlsExpansionCounter As Long
        
TlsBitmap As Long
        
TlsBitmapBits(1 To 2) As Long
        
ReadOnlySharedMemoryBase As Long
        
ReadOnlySharedMemoryHeap As Long
        
ReadOnlyStaticServerData As Long
        
AnsiCodePageData As Long
        
OemCodePageData As Long
        
UnicodeCaseTableData As Long
        
NumberOfProcessors As Long
        
NtGlobalFlag As Long
        
CriticalSectionTimeout As LARGE_INTEGER
        HeapSegmentReserve
As Long
        
HeapSegmentCommit As Long
        
HeapDeCommitTotalFreeThreshold As Long
        
HeapDeCommitFreeBlockThreshold As Long
        
NumberOfHeaps As Long
        
MaximumNumberOfHeaps As Long
        
ProcessHeaps As Long
        
GdiSharedHandleTable As Long
        
ProcessStarterHelper As Long
        
GdiDCAttributeList As Long
        
LoaderLock As Long
        
OSMajorVersion As Long
        
OSMinorVersion As Long
        
OSBuildNumber As Integer
        
OSCSDVersion As Integer
        
OSPlatformId As Long
        
ImageSubsystem As Long
        
ImageSubsystemMajorVersion As Long
        
ImageSubsystemMinorVersion As Long
        
ImageProcessAffinityMask As Long
        
GdiHandleBuffer(1 To 34) As Long
        
PostProcessInitRoutine As Long
        
TlsExpansionBitmap As Long
        
TlsExpansionBitmapBits(1 To 32) As Long
        
SessionId As Long
        
AppCompatFlags As LARGE_INTEGER
        AppCompatFlagsUser
As LARGE_INTEGER
        pShimData
As Long
        
AppCompatInfo As Long
        
CSDVersion As UNICODE_STRING
        ActivationContextData
As Long
        
ProcessAssemblyStorageMap As Long
        
SystemDefaultActivationContextData As Long
        
SystemAssemblyStorageMap As Long
        
MinimumStackCommit As Long
End
Type
Public Declare Function ZwReadVirtualMemory _
               
Lib "NTDLL.DLL" (ByVal ProcessHandle As Long, _
                                
ByVal BaseAddress As Long, _
                                
ByVal pBuffer As Long, _
                                
ByVal NumberOfBytesToRead As Long, _
                                
ByRef NumberOfBytesReaded As Long) As Long
Public Declare Function
ZwWriteVirtualMemory _
               
Lib "NTDLL.DLL" (ByVal ProcessHandle As Long, _
                                
ByVal BaseAddress As Long, _
                                
ByVal pBuffer As Long
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-22 20:07:41 | 显示全部楼层
, _
                                
ByVal NumberOfBytesToWrite As Long, _
                                
ByRef NumberOfBytesWritten As Long) As Long
Public Function
LzEnumLibraryFunction(ByVal hProcess, ByVal hModule As Long) As ExportTableInformation()
On Error GoTo ErrHdl
        
If (hModule <= 0) Then GoTo ErrHdl
        
Const FUNCTION_NAME_MAX_SIZE = &HFF
        
Dim st As Long
        Dim
inhInfo As IMAGE_NT_HEADER
        
Dim dmhInfo As DOS_MZ_HEADER
        
Dim ret() As ExportTableInformation
        
Dim pExportDir As IMAGE_EXPORT_DIRECTORY
        
Dim lpNameOridinals() As Integer, lpName() As Long, lpFunctions() As Long  'poniters
        
ReDim ret(0)
        st = ZwReadVirtualMemory(hProcess, hModule, VarPtr(dmhInfo), LenB(dmhInfo),
0)
        
If (NT_SUCCESS(st)) Then
               
st = ZwReadVirtualMemory(hProcess, hModule + dmhInfo.e_lfanew, VarPtr(inhInfo), LenB(inhInfo), 0)
               
If (NT_SUCCESS(st)) Then
                        
st = ZwReadVirtualMemory(hProcess, inhInfo.OptionalHeader.DataDirectory(IMAGE_DIRECTORY_ENTRY_EXPORT).VirtualAddress + hModule, VarPtr(pExportDir), LenB(pExportDir), ByVal 0)
                        
If (NT_SUCCESS(st)) Then
                                With
pExportDir
                                       
ReDim lpNameOridinals(.NumberOfNames - 1)
                                       
ReDim lpName(.NumberOfNames - 1)
                                       
ReDim lpFunctions(.NumberOfFunctions - 1)
                                        st = ZwReadVirtualMemory(hProcess, .AddressOfNameOridinals + hModule, VarPtr(lpNameOridinals(
0)), Len(lpNameOridinals(0)) * (.NumberOfNames), ByVal 0)
                                        st = ZwReadVirtualMemory(hProcess, .AddressOfNames + hModule, VarPtr(lpName(
0)), Len(lpName(0)) * (.NumberOfNames), ByVal 0)
                                        st = ZwReadVirtualMemory(hProcess, .AddressOfFunctions + hModule, VarPtr(lpFunctions(
0)), Len(lpFunctions(0)) * (.NumberOfFunctions), ByVal 0)
                                       
ReDim ret(.NumberOfFunctions - 1)
                                       
Dim I As Long, J As Long: I = 0: J = 0
                                       
Dim szFuncName As String
                                        Dim
bytFuncName() As Byte
                                        Dim
curByte As Byte
                                        Dim
Base As Long: Base = .Base
                                       
Dim lRetLength As Long
                                        Dim
curIndex As Long
                                        ReDim
bytFuncName(0)
                                       
For I = 0 To (.NumberOfFunctions - 1)
                                                
For J = 0 To (.NumberOfNames - 1)
                                                        
If (lpNameOridinals(J) = I) Then
                                                                Do
                                                                        
st = ZwReadVirtualMemory(hProcess, hModule + lpName(I) + curIndex, VarPtr(curByte), 1, ByVal 0)
                                                                        bytFuncName(curIndex) = curByte
                                                                        curIndex = curIndex +
1
                                                                        
ReDim Preserve bytFuncName(curIndex)
                                                               
Loop Until ((Not NT_SUCCESS(st)) Or (curByte = 0) Or (curIndex > FUNCTION_NAME_MAX_SIZE))
                                                               
ReDim Preserve bytFuncName(UBound(bytFuncName) - 2)
                                                                szFuncName = StrConv(bytFuncName, vbUnicode)
                                                                ret(I).szFunctionName = szFuncName
                                                                ret(I).dwOridinal = lpNameOridinals(I) + Base -
1
                                                               
Exit For
                                                        End If
                                                Next
                                                
curIndex = 0
                                                
ret(I).dwFunctionAddr = lpFunctions(ret(I).dwOridinal)
                                       
Next
                                End With
                        End If
                End If
        End If

ErrHdl:
        LzEnumLibraryFunction = ret
        
On Error Resume Next
        Erase
ret
End Function


st里边的东西。
回复 支持 反对

使用道具 举报

发表于 2007-9-22 21:35:52 | 显示全部楼层
果然跟我想的一样,如果是这样应该有更简单一点的办法
直接copymemory app.hinstance, 直接找,但我总觉得哪里不对劲
这个进程读写,貌似很多东西没有读到
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-23 11:03:43 | 显示全部楼层
读app.hinstance出来的应该是进程的image?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2020-6-3 01:39

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表