Pazīmes
Ievadot objektu, kas atrodas fiksētu adresi Visual Studio atkļūdotāja skatīties logā objekta nosaukums, tiek parādīts ziņojums, kas līdzīgs šim:
nav definēts object_name identifikators
Piemēram, šī problēma var atveidot apkopot un palaižot šo kodu sistēmā x86:
Relocate.asm
.586
.MODEL FLAT
PUBLIC _fixed_struct
_fixed_struct = 04000000h
END
Main.cpp
#include <Windows.h>
#define SHM_ADDRESS 0x04000000
#define SHM_SIZE_BYTES 1024
#define SHM_NAME L"TEST_NAME"
extern "C"
{
extern struct fixed_struct_type {
int a;
int b;
int c;
} fixed_struct;
}
void AttachShm()
{
HANDLE mapfile = CreateFileMapping(
INVALID_HANDLE_VALUE, // current file handle (use System page file)
NULL, // default security (not inheritable)
PAGE_READWRITE, // read/write permission
0, // size of File (high-order doubleword)
SHM_SIZE_BYTES, // size of File (low-order doubleword)
SHM_NAME); // name of mapping object
MapViewOfFileEx(
mapfile, // handle to mapping object
FILE_MAP_ALL_ACCESS, // read/write permission
0, // address offset (high-order doubleword)
0, // address offset (low-order doubleword)
SHM_SIZE_BYTES, // size of common block
(LPVOID)SHM_ADDRESS); // suggested starting address
}
int main(int argc, char* argv[])
{
AttachShm();
fixed_struct.a = 30;
// Put a breakpoint on the next line, view fixed_struct.a in watch window
return 0;
}
Iemesls
Vecākās programmas Visual Studio atkļūdotāja relatīvā adreses vietā izmantot absolūtā adreses visiem mainīgajiem. Tas izraisīja mainīgos, kas atrodas fiksēts adreses nevar atrast tiešraides diapazons pašreizējo steka kadrs.
Risinājums
Šis labojums attiecas tikai uz Visual Studio 2015 atjauninājums 3. Ja vēlaties apskatīt absolūtā adreses, jāizmanto Visual Studio 2015 atjauninājums 3. vai jaunāku versiju.
Labojums ir pieejams lejupielādei no Microsoft Download Center:
Microsoft ir skenējusi šo failu, lai noteiktu, vai tajā nav vīrusu, izmantojot visjaunāko vīrusu noteikšanas programmatūru, kas bija pieejama faila izlikšanas datumā. Fails ir saglabāts serveros ar paaugstinātu drošību, tādējādi novēršot neautorizētu izmaiņu veikšanu tajā.