Last active
August 29, 2015 14:03
-
-
Save ntddk/a9564e0bd106938135ed to your computer and use it in GitHub Desktop.
昔のメモリエディタ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <Windows.h> | |
#include <stdio.h> | |
#include <time.h> | |
#include "resource.h" | |
#define Msg(x) MessageBox(0, x, 0, 0); | |
#define CT(x, y) CreateThread(0, 0, (LPTHREAD_START_ROUTINE)x, (LPVOID)y, 0, 0) | |
#pragma warning(disable:4244) | |
#pragma warning(disable:4800) | |
#pragma warning(disable:4996) | |
HWND G_hDlg, hLB; | |
HANDLE hProcess, hSnapshot; | |
char str[9], freestr[256]; | |
int i, index, _index, LBCount, LBCount2, arry1[99999], arry2[99999]; | |
clock_t start, end; | |
unsigned long ulBytesRead, ulCurrentChannel, ulCurrentID, ulOldProtect, ulU; | |
void ChangeText(int nIDDlgItem, char msg[]){ | |
HWND hWnd = GetDlgItem(G_hDlg, nIDDlgItem); | |
SetWindowText(GetDlgItem(G_hDlg, nIDDlgItem), msg); | |
} | |
template<typename T_n> | |
void SearchMemory(int type){ | |
start = clock(); | |
char strKERNEL_ADR[256], strEND_ADR[256]; | |
int KERNEL_ADR, END_ADR, vsize; | |
KERNEL_ADR = GetDlgItemText(G_hDlg, IDC_EDIT3, strKERNEL_ADR, sizeof(strKERNEL_ADR)); | |
END_ADR = GetDlgItemText(G_hDlg, IDC_EDIT4, strEND_ADR, sizeof(strEND_ADR)); | |
KERNEL_ADR = strtol(strKERNEL_ADR, NULL, 16); | |
END_ADR = strtol(strEND_ADR, NULL, 16); | |
T_n buf, target; | |
char strTarget[256]; | |
GetDlgItemText(G_hDlg, IDC_EDIT1, strTarget, sizeof(strTarget)); | |
LBCount = SendMessage(hLB, LB_GETCOUNT, 0, 0); | |
switch(type){ | |
case 0: | |
target = atoi(strTarget); | |
sprintf(str, "%d", target); | |
vsize = sizeof(T_n); | |
break; | |
case 1: | |
target = atol(strTarget); | |
sprintf(str, "%ld", target); | |
vsize = sizeof(T_n); | |
break; | |
case 2: | |
target = (float)atof(strTarget); | |
sprintf(str, "%f", target); | |
vsize = sizeof(T_n); | |
break; | |
case 3: | |
target = atof(strTarget); | |
sprintf(str, "%lf", target); | |
vsize = sizeof(T_n); | |
break; | |
} | |
ChangeText(IDC_STATIC_NOW, "SearchStart"); | |
switch(LBCount){ | |
case 0: | |
i=0; | |
while(KERNEL_ADR < END_ADR){ | |
ReadProcessMemory(hProcess, (T_n*)KERNEL_ADR, &buf, vsize, NULL); | |
if(buf==target){ | |
arry1[i] = KERNEL_ADR; | |
i++; | |
sprintf(str, "%p", KERNEL_ADR); | |
SendMessage(hLB, LB_ADDSTRING, 0, (LPARAM)str); | |
} | |
KERNEL_ADR += vsize; | |
} | |
break; | |
default: | |
SendMessage(hLB, LB_RESETCONTENT, 0, 0); | |
for(i=0; i<LBCount; i++){ | |
ReadProcessMemory(hProcess, (T_n*)arry1[i], &buf, vsize, NULL); | |
if(buf==target){ | |
sprintf(str, "%p", arry1[i]); | |
SendMessage(GetDlgItem(G_hDlg, IDC_LIST1), LB_ADDSTRING, 0, (LPARAM)str); | |
} | |
KERNEL_ADR += vsize; | |
} | |
break; | |
} | |
end = clock(); | |
if(SendMessage(hLB, LB_GETCOUNT, 0, 0)==0){ | |
ChangeText(IDOK, "????"); | |
} | |
sprintf(freestr, "SearchEnd\nTotal:%d\n????????:%f?b", SendMessage(hLB, LB_GETCOUNT, 0, 0), (double)(end - start) / CLOCKS_PER_SEC); | |
ChangeText(IDC_STATIC_NOW, freestr); | |
} | |
template<typename T_n> | |
void WriteMemory(int type){ | |
int adr; | |
T_n WriteValue, *p; | |
char stradr[9], strWriteValue[256]; | |
GetDlgItemText(G_hDlg, IDC_EDIT5, stradr, sizeof(stradr)); | |
GetDlgItemText(G_hDlg, IDC_EDIT2, strWriteValue, sizeof(strWriteValue)); | |
adr = strtol(stradr, NULL, 16); | |
switch(type){ | |
case 0: | |
WriteValue = atoi(strWriteValue); | |
break; | |
case 1: | |
WriteValue = atol(strWriteValue); | |
break; | |
case 2: | |
WriteValue = (float)atof(strWriteValue); | |
break; | |
case 3: | |
WriteValue = atof(strWriteValue); | |
break; | |
} | |
p=(T_n*)adr; | |
*p = WriteValue; | |
} | |
int CALLBACK DialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam){ | |
G_hDlg = hDlg; | |
switch(msg){ | |
case WM_SHOWWINDOW: | |
char str2[256]; | |
GetModuleFileName(NULL, str, sizeof(str)); | |
sprintf(str2, "Target:%s", str); | |
SetWindowText(G_hDlg, str2); | |
// listbox | |
hLB = GetDlgItem(hDlg, IDC_LIST1); | |
// combobox1 | |
SendMessage(GetDlgItem(hDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"int"); | |
SendMessage(GetDlgItem(hDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"long"); | |
SendMessage(GetDlgItem(hDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"float"); | |
SendMessage(GetDlgItem(hDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"double"); | |
SendMessage(GetDlgItem(hDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"Arry"); | |
SendMessage(GetDlgItem(hDlg, IDC_COMBO1), CB_SETCURSEL, 0, 0); | |
// combobox2 | |
SendMessage(GetDlgItem(hDlg, IDC_COMBO2), CB_ADDSTRING, 0, (LPARAM)"int"); | |
SendMessage(GetDlgItem(hDlg, IDC_COMBO2), CB_ADDSTRING, 0, (LPARAM)"long"); | |
SendMessage(GetDlgItem(hDlg, IDC_COMBO2), CB_ADDSTRING, 0, (LPARAM)"float"); | |
SendMessage(GetDlgItem(hDlg, IDC_COMBO2), CB_ADDSTRING, 0, (LPARAM)"double"); | |
SendMessage(GetDlgItem(hDlg, IDC_COMBO2), CB_ADDSTRING, 0, (LPARAM)"Arry"); | |
SendMessage(GetDlgItem(hDlg, IDC_COMBO2), CB_SETCURSEL, 0, 0); | |
ChangeText(IDC_EDIT3, "0x00000000"); | |
ChangeText(IDC_EDIT4, "0x00F00000"); | |
return FALSE; | |
case WM_NCHITTEST: | |
SetWindowLong(hDlg, DWL_MSGRESULT, HTCAPTION); | |
return TRUE; | |
case WM_COMMAND: | |
if (HIWORD(wParam) == LBN_DBLCLK){ | |
_index = SendMessage(hLB , LB_GETCURSEL , 0 , 0); | |
char stradr[9]; | |
SendMessage(hLB, LB_GETTEXT, _index, (LPARAM)stradr); | |
ChangeText(IDC_EDIT5, stradr); | |
} | |
switch(LOWORD(wParam)){ | |
case IDEND: | |
ExitProcess(0); | |
return FALSE; | |
case IDC_BUTTONCANSEL: | |
// ?L?????Z???{?^?? | |
ChangeText(IDOK, "????"); | |
LBCount = SendMessage(hLB, LB_GETCOUNT, 0, 0); | |
for(i=0; i<LBCount;i++){ | |
SendMessage(hLB, LB_DELETESTRING, 0, 0); | |
} | |
return FALSE; | |
case IDOK: | |
index = SendMessage(GetDlgItem(hDlg, IDC_COMBO1), CB_GETCURSEL, 0, 0); | |
switch(index){ | |
case 0: | |
CT(SearchMemory<int>, 0); | |
break; | |
case 1: | |
CT(SearchMemory<long>, 1); | |
break; | |
case 2: | |
CT(SearchMemory<float>, 2); | |
break; | |
case 3: | |
CT(SearchMemory<double>, 3); | |
break; | |
case 4: | |
// Arry | |
break; | |
} | |
ChangeText(IDOK, "??"); | |
return FALSE; | |
case IDC_BUTTON_WRITE: | |
index = SendMessage(GetDlgItem(hDlg, IDC_COMBO2), CB_GETCURSEL, 0, 0); | |
switch(index){ | |
case 0: | |
CT(WriteMemory<int>, 0); | |
break; | |
case 1: | |
CT(WriteMemory<long>, 1); | |
break; | |
case 2: | |
CT(WriteMemory<float>, 2); | |
break; | |
case 3: | |
CT(WriteMemory<double>, 3); | |
break; | |
case 4: | |
// Arry | |
break; | |
// Microsoft Visual C++ generated resource script. | |
// | |
#include "resource.h" | |
#define APSTUDIO_READONLY_SYMBOLS | |
///////////////////////////////////////////////////////////////////////////// | |
// | |
// Generated from the TEXTINCLUDE 2 resource. | |
// | |
#include "afxres.h" | |
///////////////////////////////////////////////////////////////////////////// | |
#undef APSTUDIO_READONLY_SYMBOLS | |
///////////////////////////////////////////////////////////////////////////// | |
// 日本語 (日本) resources | |
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN) | |
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT | |
#ifdef APSTUDIO_INVOKED | |
///////////////////////////////////////////////////////////////////////////// | |
// | |
// TEXTINCLUDE | |
// | |
1 TEXTINCLUDE | |
BEGIN | |
"resource.h\0" | |
END | |
2 TEXTINCLUDE | |
BEGIN | |
"#include ""afxres.h""\r\n" | |
"\0" | |
END | |
3 TEXTINCLUDE | |
BEGIN | |
"\r\n" | |
"\0" | |
END | |
#endif // APSTUDIO_INVOKED | |
///////////////////////////////////////////////////////////////////////////// | |
// | |
// Dialog | |
// | |
IDD_DIALOG1 DIALOGEX 0, 0, 262, 313 | |
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | |
CAPTION "Dialog" | |
FONT 8, "MS Shell Dlg", 400, 0, 0x1 | |
BEGIN | |
DEFPUSHBUTTON "検索",IDOK,144,120,50,14 | |
PUSHBUTTON "終了",IDEND,198,294,50,14 | |
LISTBOX IDC_LIST1,7,7,89,299,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP | |
EDITTEXT IDC_EDIT1,174,96,72,14,ES_AUTOHSCROLL | |
COMBOBOX IDC_COMBO1,174,78,72,113,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | |
LTEXT "タイプ",IDC_STATIC,114,80,42,8 | |
LTEXT "値",IDC_STATIC,114,98,48,8 | |
LTEXT "",IDC_STATIC_NOW,108,6,132,49 | |
PUSHBUTTON "書き換え",IDC_BUTTON_WRITE,198,228,50,14 | |
EDITTEXT IDC_EDIT2,174,210,74,14,ES_AUTOHSCROLL | |
LTEXT "書き換える値",IDC_STATIC,114,208,50,14 | |
LTEXT "開始",IDC_STATIC,114,264,17,8 | |
EDITTEXT IDC_EDIT3,138,258,96,14,ES_AUTOHSCROLL | |
LTEXT "終了",IDC_STATIC,114,282,17,8 | |
EDITTEXT IDC_EDIT4,138,276,96,14,ES_AUTOHSCROLL | |
EDITTEXT IDC_EDIT5,174,174,74,14,ES_AUTOHSCROLL | |
LTEXT "アドレス",IDC_STATIC,114,174,50,14 | |
COMBOBOX IDC_COMBO2,174,192,72,113,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | |
LTEXT "タイプ",IDC_STATIC,114,190,50,14 | |
GROUPBOX "書き換え",IDC_STATIC,102,150,156,96 | |
PUSHBUTTON "キャンセル",IDC_BUTTONCANSEL,198,120,50,14 | |
GROUPBOX "検索",IDC_STATIC,102,66,156,78 | |
LTEXT "Created by KAGASU",IDC_STATIC,107,298,66,8 | |
END | |
///////////////////////////////////////////////////////////////////////////// | |
// | |
// DESIGNINFO | |
// | |
#ifdef APSTUDIO_INVOKED | |
GUIDELINES DESIGNINFO | |
BEGIN | |
IDD_DIALOG1, DIALOG | |
BEGIN | |
LEFTMARGIN, 7 | |
RIGHTMARGIN, 255 | |
TOPMARGIN, 7 | |
BOTTOMMARGIN, 306 | |
END | |
END | |
#endif // APSTUDIO_INVOKED | |
#endif // 日本語 (日本) resources | |
///////////////////////////////////////////////////////////////////////////// | |
#ifndef APSTUDIO_INVOKED | |
///////////////////////////////////////////////////////////////////////////// | |
// | |
// Generated from the TEXTINCLUDE 3 resource. | |
// | |
///////////////////////////////////////////////////////////////////////////// | |
#endif // not APSTUDIO_INVOKED | |
} | |
return FALSE; | |
} | |
return FALSE; | |
} | |
return FALSE; | |
} | |
void _ShowWindow(HINSTANCE _hInst){ | |
DialogBox(_hInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc); | |
} | |
BOOL WINAPI DllMain ( HMODULE hDll, DWORD dwReason, LPVOID lpReserved ){ | |
if(dwReason == DLL_PROCESS_ATTACH){ | |
hProcess = OpenProcess(PROCESS_VM_READ, FALSE, GetCurrentProcessId()); | |
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)_ShowWindow, (LPVOID)hDll, 0, 0); | |
} | |
return TRUE; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//{{NO_DEPENDENCIES}} | |
// Microsoft Visual C++ generated include file. | |
// Used by RWMemory.rc | |
// | |
#define IDD_DIALOG1 101 | |
#define IDC_LIST1 1005 | |
#define IDC_EDIT1 1006 | |
#define IDC_COMBO1 1007 | |
#define IDC_COMBO2 1010 | |
#define IDC_TAB1 1011 | |
#define IDC_STATIC_NOW 1012 | |
#define IDEND 1014 | |
#define IDC_BUTTON_WRITE 1017 | |
#define IDC_EDIT2 1018 | |
#define IDC_EDIT3 1019 | |
#define IDC_EDIT4 1020 | |
#define IDC_EDIT5 1021 | |
#define IDC_BUTTON1 1022 | |
#define IDC_BUTTONCANSEL 1022 | |
// Next default values for new objects | |
// | |
#ifdef APSTUDIO_INVOKED | |
#ifndef APSTUDIO_READONLY_SYMBOLS | |
#define _APS_NEXT_RESOURCE_VALUE 104 | |
#define _APS_NEXT_COMMAND_VALUE 40001 | |
#define _APS_NEXT_CONTROL_VALUE 1023 | |
#define _APS_NEXT_SYMED_VALUE 101 | |
#endif | |
#endif |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Microsoft Visual C++ generated resource script. | |
// | |
#include "resource.h" | |
#define APSTUDIO_READONLY_SYMBOLS | |
///////////////////////////////////////////////////////////////////////////// | |
// | |
// Generated from the TEXTINCLUDE 2 resource. | |
// | |
#include "afxres.h" | |
///////////////////////////////////////////////////////////////////////////// | |
#undef APSTUDIO_READONLY_SYMBOLS | |
///////////////////////////////////////////////////////////////////////////// | |
// 日本語 (日本) resources | |
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN) | |
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT | |
#ifdef APSTUDIO_INVOKED | |
///////////////////////////////////////////////////////////////////////////// | |
// | |
// TEXTINCLUDE | |
// | |
1 TEXTINCLUDE | |
BEGIN | |
"resource.h\0" | |
END | |
2 TEXTINCLUDE | |
BEGIN | |
"#include ""afxres.h""\r\n" | |
"\0" | |
END | |
3 TEXTINCLUDE | |
BEGIN | |
"\r\n" | |
"\0" | |
END | |
#endif // APSTUDIO_INVOKED | |
///////////////////////////////////////////////////////////////////////////// | |
// | |
// Dialog | |
// | |
IDD_DIALOG1 DIALOGEX 0, 0, 262, 313 | |
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | |
CAPTION "Dialog" | |
FONT 8, "MS Shell Dlg", 400, 0, 0x1 | |
BEGIN | |
DEFPUSHBUTTON "検索",IDOK,144,120,50,14 | |
PUSHBUTTON "終了",IDEND,198,294,50,14 | |
LISTBOX IDC_LIST1,7,7,89,299,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP | |
EDITTEXT IDC_EDIT1,174,96,72,14,ES_AUTOHSCROLL | |
COMBOBOX IDC_COMBO1,174,78,72,113,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | |
LTEXT "タイプ",IDC_STATIC,114,80,42,8 | |
LTEXT "値",IDC_STATIC,114,98,48,8 | |
LTEXT "",IDC_STATIC_NOW,108,6,132,49 | |
PUSHBUTTON "書き換え",IDC_BUTTON_WRITE,198,228,50,14 | |
EDITTEXT IDC_EDIT2,174,210,74,14,ES_AUTOHSCROLL | |
LTEXT "書き換える値",IDC_STATIC,114,208,50,14 | |
LTEXT "開始",IDC_STATIC,114,264,17,8 | |
EDITTEXT IDC_EDIT3,138,258,96,14,ES_AUTOHSCROLL | |
LTEXT "終了",IDC_STATIC,114,282,17,8 | |
EDITTEXT IDC_EDIT4,138,276,96,14,ES_AUTOHSCROLL | |
EDITTEXT IDC_EDIT5,174,174,74,14,ES_AUTOHSCROLL | |
LTEXT "アドレス",IDC_STATIC,114,174,50,14 | |
COMBOBOX IDC_COMBO2,174,192,72,113,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | |
LTEXT "タイプ",IDC_STATIC,114,190,50,14 | |
GROUPBOX "書き換え",IDC_STATIC,102,150,156,96 | |
PUSHBUTTON "キャンセル",IDC_BUTTONCANSEL,198,120,50,14 | |
GROUPBOX "検索",IDC_STATIC,102,66,156,78 | |
LTEXT "Created by KAGASU",IDC_STATIC,107,298,66,8 | |
END | |
///////////////////////////////////////////////////////////////////////////// | |
// | |
// DESIGNINFO | |
// | |
#ifdef APSTUDIO_INVOKED | |
GUIDELINES DESIGNINFO | |
BEGIN | |
IDD_DIALOG1, DIALOG | |
BEGIN | |
LEFTMARGIN, 7 | |
RIGHTMARGIN, 255 | |
TOPMARGIN, 7 | |
BOTTOMMARGIN, 306 | |
END | |
END | |
#endif // APSTUDIO_INVOKED | |
#endif // 日本語 (日本) resources | |
///////////////////////////////////////////////////////////////////////////// | |
#ifndef APSTUDIO_INVOKED | |
///////////////////////////////////////////////////////////////////////////// | |
// | |
// Generated from the TEXTINCLUDE 3 resource. | |
// | |
///////////////////////////////////////////////////////////////////////////// | |
#endif // not APSTUDIO_INVOKED | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment