Skip to content

Commit

Permalink
label 未対応だったのを対応
Browse files Browse the repository at this point in the history
  • Loading branch information
i-saint committed Jun 5, 2013
1 parent 35f089d commit bfd548e
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 13 deletions.
5 changes: 2 additions & 3 deletions Test/Test_Simple/Test_Simple.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ dpNoInline void Test_ThisMaybeOverridden()

int main(int argc, char *argv[])
{
dpInitialize();
dpInitialize(dpE_LogAll);
dpAddLoadPath(dpObjDir"/*.obj");
dpAddSourcePath("Test_Simple");
dpAddMSBuildCommand("Test_Simple.vcxproj /target:ClCompile /m /p:Configuration="dpConfiguration";Platform="dpPlatform);
Expand All @@ -84,9 +84,8 @@ int main(int argc, char *argv[])
Test test;
while(!test.getEndFlag()) {
test.doSomething();
Test_ThisMaybeOverridden();

::Sleep(3000);
::Sleep(1000);
dpUpdate();
}
}
Expand Down
10 changes: 8 additions & 2 deletions dpBinary.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ bool dpObjFile::loadMemory(const char *path, void *data, size_t size, dpTime mti
void *data = (void*)(ImageBase + (int)sect.PointerToRawData + sym->Value);
if(sym->SectionNumber==IMAGE_SYM_UNDEFINED) { continue; }
const char *name = dpGetSymbolName(StringTable, sym);
if(name[0]!='.') {
if(name[0]!='.' && name[0]!='$') {
DWORD flags = 0;
if((sect.Characteristics&IMAGE_SCN_CNT_CODE)) { flags|=dpE_Code; }
if((sect.Characteristics&IMAGE_SCN_CNT_INITIALIZED_DATA)) { flags|=dpE_IData; }
Expand Down Expand Up @@ -267,7 +267,13 @@ bool dpObjFile::partialLink(size_t si)
PIMAGE_RELOCATION pReloc = pRelocation + ri;
PIMAGE_SYMBOL rsym = pSymbolTable + pReloc->SymbolTableIndex;
const char *rname = dpGetSymbolName(StringTable, rsym);
size_t rdata = (size_t)resolveSymbol(rname);
size_t rdata = 0;
if(rname[0]=='$') {
rdata = (size_t)(ImageBase + (int)pSectionHeader[rsym->SectionNumber-1].PointerToRawData + rsym->Value);
}
else {
rdata = (size_t)resolveSymbol(rname);
}
if(rdata==NULL) {
dpPrintError("symbol \"%s\" (referenced by \"%s\") cannot be resolved.\n", rname, m_path.c_str());
ret = false;
Expand Down
18 changes: 10 additions & 8 deletions dpPatcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,20 +32,22 @@ static size_t dpCopyInstructions(void *dst, void *src, size_t minlen)
//if(pins->Type == ITYPE_BRANCHCC) break;
//if(pins->Type == ITYPE_CALL ) break;
//if(pins->Type == ITYPE_CALLCC ) break;
/*

switch(pLoc[0]) {
// call & jmp
case 0xE8:
case 0xE9:
{
can_memcpy = false;
int rva = *(int*)(src+1);
dst[ret] = src[ret];
*(DWORD*)(dst+ret+1) = (ptrdiff_t)(src+ret+rva)-(ptrdiff_t)(dst+ret);
ret += 5;
int rva = *(int*)(pLoc+1);
pDst[0] = pLoc[0];
*(DWORD*)(pDst+1) = (DWORD)((ptrdiff_t)(pLoc+rva)-(ptrdiff_t)(pDst));
}
*/
break;
default:
memcpy(pDst, pLoc, pins->Length);
break;
}

memcpy(pDst, pLoc, pins->Length);
len += pins->Length;
pLoc += pins->Length;
pDst += pins->Length;
Expand Down

0 comments on commit bfd548e

Please sign in to comment.