그래서 리버스 엔지니어링을 위해 다른 프로그램의 메모리를 읽습니다. kernel32.dll에서 함수를 사용하고 있습니다. 나는 비트에 의해 메모리 비트를 읽을과 같이 그것을 사용하고메모리 덩어리 읽기, 로컬 구조체에 저장
ReadProcessMemory(Handle, new IntPtr(Address), buffer, BytesToRead, out ptrBytesRead);
:하십시오 프로그램 처리하여 ReadInt32를 호출 다음
public static int ReadInt32(IntPtr Handle, long Address)
{
return BitConverter.ToInt32(ReadBytes(Handle, Address, 4), 0);
}
및 주소 I
기능은 다음과 같습니다 정적이 아니기 때문에 프로그램의 기본 주소를 추가하여 읽기를 원합니다.
내가 원하는 것은 전체 메모리 (최대 1300 개의 레코드, 각 레코드는 0xB0의 메모리 단계를 가짐)를 읽는 것입니다.
나는 이것에 대해 가장 좋은 방법이 무엇인지 정확히 모르겠습니다. 나는 그것을 들여다 보았고, 내가 모든 것을 취하고 기본적으로 그것을 내 자신의 구조로 버리는 것을 할 수있는 것처럼 보입니다. 내가 겪고있는 문제는 내가 실제로해야 할 일이 무엇인지 알지 못한다는 것입니다. 나는 내 마음 속에서 그것을 볼 수는 있지만 펜을 종이 위에 놓을 수는 없다.
나는 구조에서 다음과 같이보고, 사실 2 차원 배열입니다 것을 보여주기 위해 확장됩니다 :
int OFFSET_CREATURE_ID = 0;
int OFFSET_CREATURE_TYPE = 3;
int OFFSET_CREATURE_NAME = 4;
int OFFSET_CREATURE_Z = 36;
int OFFSET_CREATURE_Y = 40;
int OFFSET_CREATURE_X = 44;
int OFFSET_CREATURE_IS_WALKING = 80;
int OFFSET_CREATURE_DIRECTION = 84;
int OFFSET_CREATURE_OUTFIT = 100;
int OFFSET_CREATURE_OUTFIT_HEAD = 104;
int OFFSET_CREATURE_OUTFIT_BODY = 108;
int OFFSET_CREATURE_OUTFIT_LEGS = 112;
int OFFSET_CREATURE_OUTFIT_FEET = 116;
int OFFSET_CREATURE_OUTFIT_ADDON = 120;
int OFFSET_CREATURE_LIGHT = 124;
int OFFSET_CREATURE_LIGHT_COLOR = 128;
int OFFSET_CREATURE_HP_BAR = 140;
int OFFSET_CREATURE_WALK_SPEED = 144;
int OFFSET_CREATURE_IS_VISIBLE = 148;
int OFFSET_CREATURE_SKULL = 152;
int OFFSET_CREATURE_PARTY = 156;
int OFFSET_CREATURE_WARICON = 164;
int OFFSET_CREATURE_ISBLOCKING = 168;
그 오프셋 각각 내 구조의 다른 요소에 할당해야합니다. 그들 중 일부는 bool, int, 일부 문자열입니다. 나는 구조체를 가지고있다. 나는 각 값을 읽을 때마다 구조체의 새로운 인스턴스를 선언 할 필요가 있다고 생각하지만 길이가 각 오프셋에 대해 전체 "단계"를 소비한다는 사실을 짐작할 수는 없습니다 (각 500ms 정도 읽는다면, 250 레코드의 총 읽기 시간은 약 50ms이며, 이는 내가 읽어야 할 것으로 기대됩니다!하지만 최대 1300 개까지 수행 할 수 있어야합니다.)
혼란스러운 코드는 아니며, 내가해야 할 일에 대한 설명만으로 충분할 것입니다. 나는이 양의 코드로 작업 할 때 많은 어려움을 겪습니다. 누군가가이 모든 것을 읽을 클래스를 만들지 않으면 그것을 저장하는 구조로 (그래서 저는 그것을 내 작업으로 변환 할 수 있습니다), 문자 그대로 최소한의 코드를 고맙게 생각합니다.
관리가 가능해 보이고 개념을 제 코드에 적용 할 수 있다고 생각합니다. 감사합니다. – XtrmJosh