Я хотел бы вручную прочитать значения, количество значений и емкость, выделенную для вектора.
После прочтения этого я полагал, что к std :: vector можно было получить доступ вручную через следующую структуру
struct _vector{
DWORD* begin;
DWORD* end;
DWORD* tail;
};
и что я мог получить доступ к первому значению ввектор, выполнив следующее.
_vector *vec = (_vector*)vectorAddress;
DWORD first_value = vec->begin[0];
Однако вместо этого я обнаружил, что это не так.Мне нужно было добавить еще 4 байта в верхней части структуры, чтобы правильно сделать адреса доступа для начала, конца и хвоста.Ниже приведена рабочая версия того, что я хотел бы сделать.
#include <iostream>
#include <windows.h>
#include <vector>
std::vector<DWORD> vectorData;
void readVector(DWORD vectorAddress){
struct _vector{
DWORD* WHATISTHIS;
DWORD* begin;
DWORD* end;
DWORD* tail;
};
_vector* vec = (_vector*)vectorAddress;
DWORD count = ((DWORD)vec->end - (DWORD)vec->begin) / sizeof(DWORD);
DWORD capacity = ((DWORD)vec->tail - (DWORD)vec->begin) / sizeof(DWORD);
printf("Vector has %d items and %d capacity\n", count, capacity);
for (int i = 0; i < count; i++)
printf("\tValue at %d is 0x%x\n", i, vec->begin[i]);
}
int main(void){
vectorData.reserve(3);
vectorData.push_back(0x123456);
vectorData.push_back(0x654321);
while (true){
readVector((DWORD)&vectorData);
system("pause");
}
}
Вывод программы:
Vector has 2 items and 3 capacity
Value at 0 is 0x123456
Value at 1 is 0x654321
Press any key to continue . . .
Учитывая то, что на самом деле представляют первые 4 байта моей структуры _vector?