亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mergebin.cpp

?? sqlite 3.3.8 支持加密的版本
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/********************************************************
 * mergebin
 * Written by Robert Simpson (robert@blackcastlesoft.com)
 * 
 * Released to the public domain, use at your own risk!
 ********************************************************/

#include "stdafx.h"
#include "MetaData.h"
#include "MetaDataTables.h"
#include "TableData.h"

void DumpCLRInfo(LPCTSTR pszFile);
void MergeModules(LPCTSTR pszAssembly, LPCTSTR pszNative, LPCTSTR pszSection);
void DumpCLRPragma(LPCTSTR pszAssembly, LPCTSTR pszSection);

typedef struct EXTRA_STUFF
{
  DWORD dwNativeEntryPoint;
} EXTRA_STUFF, *LPEXTRA_STUFF;

int _tmain(int argc, _TCHAR* argv[])
{
  if (argc == 1)
  {
    _tprintf(_T(
"MERGEBIN - Merges a pure .NET assembly with a native DLL\n \
Syntax: MERGEBIN [/I:assembly] [/S:sectionname assembly nativedll]\n \
/I:assembly            Returns the number of bytes required\n \
                       to consume the assembly\n \
/S:sectionname         The name of the section in the nativedll\n \
                       to insert the CLR data\n \
/P:assembly            Outputs the C++ pragma code that can be used\n \
                       as additional input to a C++ app to reserve\n \
                       a section block large enough for the managed code.\n \
\n \
The native DLL must have an unused section in it, into which the\n \
.NET assembly will be inserted.  You can do this with the following code:\n \
  #pragma data_seg(\".clr\")\n \
  #pragma comment(linker, \"/SECTION:.clr,ER\")\n \
   char __ph[92316] = {0}; // 92316 is the number of bytes to reserve\n \
  #pragma data_seg()\n \
You would then specify /SECTION:.CLR in the command-line for the location to\n \
insert the .NET assembly.  The number of bytes reserved in the section needs\n \
to be equal to or more than the number of bytes returned by the /I parameter.\n \
\n \
The native DLL must also export a function that calls _CorDllMain in \n \
MSCOREE.DLL.  This function must have the same parameters and calling\n \
conventions as DllMain, and its name must have the word \"CORDLLMAIN\"\n \
in it.\n \
"));
    return 0;
  }

  LPTSTR pszAssembly = NULL;
  LPTSTR pszNative = NULL;
  LPTSTR pszSection = NULL;
  BOOL bDoPragma = FALSE;

  for (int n = 1; n < argc; n++)
  {
    if (argv[n][0] != '-' && argv[n][0] != '/')
    {
      if (pszAssembly == NULL)
        pszAssembly = argv[n];
      else if (pszNative == NULL)
        pszNative = argv[n];
      else
      {
        _tprintf(_T("Too many files specified\n"));
        return 0;
      }
      continue;
    }

    switch(argv[n][1])
    {
    case 'I':
    case 'i':
      pszAssembly = &argv[n][3];
      if (argv[n][2] != ':' || lstrlen(pszAssembly) == 0)
      {
        _tprintf(_T("/I requires an assembly name\n"));
        return 0;
      }
      DumpCLRInfo(pszAssembly);
      return 0;
      break;
    case 'P':
    case 'p':
      pszAssembly = &argv[n][3];
      if (argv[n][2] != ':' || lstrlen(pszAssembly) == 0)
      {
        _tprintf(_T("/P requires an assembly name\n"));
        return 0;
      }
      bDoPragma = TRUE;
      break;
    case 'S':
    case 's':
      pszSection = &argv[n][3];
      if (argv[n][2] != ':' || lstrlen(pszSection) == 0)
      {
        _tprintf(_T("/S requires a section name\n"));
        return 0;
      }
      break;
    }
  }

  if (pszAssembly && pszNative && pszSection && !bDoPragma)
    MergeModules(pszAssembly, pszNative, pszSection);

  if (pszAssembly && bDoPragma)
    DumpCLRPragma(pszAssembly, pszSection);

  return 0;
}

BOOL GetMinMaxCOR20RVA(CPEFile& file, DWORD& dwMin, DWORD& dwMax)
{
  PIMAGE_COR20_HEADER pCor = file;
  dwMin = MAXDWORD;
  dwMax = 0;

  if (!pCor) return FALSE;

  if (pCor->MetaData.Size) dwMin = min(dwMin, pCor->MetaData.VirtualAddress);
  if (pCor->Resources.Size) dwMin = min(dwMin, pCor->Resources.VirtualAddress);
  if (pCor->StrongNameSignature.Size) dwMin = min(dwMin, pCor->StrongNameSignature.VirtualAddress);
  if (pCor->CodeManagerTable.Size) dwMin = min(dwMin, pCor->CodeManagerTable.VirtualAddress);
  if (pCor->VTableFixups.Size) dwMin = min(dwMin, pCor->VTableFixups.VirtualAddress);
  if (pCor->ExportAddressTableJumps.Size) dwMin = min(dwMin, pCor->ExportAddressTableJumps.VirtualAddress);
  if (pCor->ManagedNativeHeader.Size) dwMin = min(dwMin, pCor->ManagedNativeHeader.VirtualAddress);

  dwMax = max(dwMax, (pCor->MetaData.VirtualAddress + pCor->MetaData.Size));
  dwMax = max(dwMax, (pCor->Resources.VirtualAddress + pCor->Resources.Size));
  dwMax = max(dwMax, (pCor->StrongNameSignature.VirtualAddress + pCor->StrongNameSignature.Size));
  dwMax = max(dwMax, (pCor->CodeManagerTable.VirtualAddress + pCor->CodeManagerTable.Size));
  dwMax = max(dwMax, (pCor->VTableFixups.VirtualAddress + pCor->VTableFixups.Size));
  dwMax = max(dwMax, (pCor->ExportAddressTableJumps.VirtualAddress + pCor->ExportAddressTableJumps.Size));
  dwMax = max(dwMax, (pCor->ManagedNativeHeader.VirtualAddress + pCor->ManagedNativeHeader.Size));

  CMetadata meta(file);
  CMetadataTables tables(meta);
  CTableData *p;
  DWORD *pdwRVA;
  DWORD dwRows;

  for (int n = 0; n < 2; n++)
  {
    p = tables.GetTable((n == 0) ? ttMethodDef : ttFieldRVA);
    if (p)
    {
      dwRows = p->GetRowCount();
      for (UINT uRow = 0; uRow < dwRows; uRow ++)
      {
        pdwRVA = (DWORD *)p->Column(uRow, (UINT)0);
        if (*pdwRVA)
          dwMin = min(dwMin, (*pdwRVA));
      }
    }
  }
  return TRUE;
}

void DumpCLRInfo(LPCTSTR pszFile)
{
  CPEFile peFile;
  HRESULT hr;
  hr = peFile.Open(pszFile);
  if (FAILED(hr)) return;

  DWORD dwMinRVA;
  DWORD dwMaxRVA;

  if (!GetMinMaxCOR20RVA(peFile, dwMinRVA, dwMaxRVA))
  {
    _tprintf(_T("Unable to retrieve .NET assembly information for file %s\n"), pszFile);
    return;
  }

  _tprintf(_T("%d Bytes required to merge %s\n"), (dwMaxRVA - dwMinRVA) + ((PIMAGE_COR20_HEADER)peFile)->cb + sizeof(EXTRA_STUFF), pszFile);
}

void DumpCLRPragma(LPCTSTR pszAssembly, LPCTSTR pszSection)
{
  CPEFile peFile;
  HRESULT hr;
  DWORD dwMinRVA;
  DWORD dwMaxRVA;

  hr = peFile.Open(pszAssembly);
  if (FAILED(hr)) return;
  
  if (pszSection == NULL) pszSection = _T(".clr");

  if (!GetMinMaxCOR20RVA(peFile, dwMinRVA, dwMaxRVA))
  {
    _tprintf(_T("// Unable to retrieve .NET assembly information for file %s\n"), pszAssembly);
    return;
  }

  _tprintf(_T("// This code was automatically generated from assembly\n\
// %s\n\n\
#include <windef.h>\n\n\
#pragma data_seg(\"%s\")\n\
#pragma comment(linker, \"/SECTION:%s,ER\")\n\
  char __ph[%d] = {0}; // The number of bytes to reserve\n\
#pragma data_seg()\n\n\
typedef BOOL (WINAPI *DLLMAIN)(HANDLE, DWORD, LPVOID);\n\
typedef struct EXTRA_STUFF\n\
{\n\
  DWORD dwNativeEntryPoint;\n\
} EXTRA_STUFF, *LPEXTRA_STUFF;\n\n\
__declspec(dllexport) BOOL WINAPI _CorDllMainStub(HANDLE hModule, DWORD dwReason, LPVOID pvReserved)\n\
{\n\
  HANDLE hMod;\n\
  DLLMAIN proc;\n\
  LPEXTRA_STUFF pExtra;\n\n\
  hMod = GetModuleHandle(_T(\"mscoree\"));\n\
  if (hMod)\n\
    proc = (DLLMAIN)GetProcAddress(hMod, _T(\"_CorDllMain\"));\n\
  else\n\
  {\n\
    MEMORY_BASIC_INFORMATION mbi;\n\n\
    VirtualQuery(_CorDllMainStub, &mbi, sizeof(mbi));\n\
    pExtra = (LPEXTRA_STUFF)__ph;\n\
    proc = (DLLMAIN)(pExtra->dwNativeEntryPoint + (DWORD)mbi.AllocationBase);\n\
  }\n\
  return proc(hModule, dwReason, pvReserved);\n\
}\n\
"), pszAssembly, pszSection, pszSection, (dwMaxRVA - dwMinRVA) + ((PIMAGE_COR20_HEADER)peFile)->cb + sizeof(EXTRA_STUFF));
}

/*   When merged, the native DLL's entrypoint must go to _CorDllMain in MSCOREE.DLL.
  ** In order to do this, we need to change the DLL's entrypoint to "something" that will
  ** call CorDllMain.  Since its too much hassle to add imports to the DLL and make drastic
  ** changes to it, we rely on the native DLL to export a function that we can call which will
  ** forward to CorDllMain.  Exported functions are easy to identify and get an RVA for.
  ** The exported function must have the same calling conventions and parameters as DllMain,
  ** and must contain the letters "CORDLLMAIN" in the name.  The search is case-insensitive. */
DWORD GetExportedCorDllMainRVA(CPEFile& file)
{
  PIMAGE_EXPORT_DIRECTORY pExportDir;
  PIMAGE_SECTION_HEADER header;
  INT delta; 
  DWORD i;
  DWORD *pdwFunctions;
  PWORD pwOrdinals;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av亚洲精华国产精华| 欧美精品欧美精品系列| 国产91在线看| 国产一区二区福利视频| 美国十次综合导航| 日韩1区2区3区| 午夜欧美视频在线观看| 五月激情综合网| 日本aⅴ免费视频一区二区三区| 日本成人超碰在线观看| 奇米色一区二区三区四区| 免费在线观看一区| 国内精品国产成人国产三级粉色 | 极品瑜伽女神91| 欧美体内she精视频| 成人免费毛片app| 精久久久久久久久久久| 美女视频免费一区| 日韩主播视频在线| 国产精品国产三级国产有无不卡| 欧美r级在线观看| 久久久久9999亚洲精品| 99精品欧美一区二区三区小说 | 欧美吞精做爰啪啪高潮| 国产一区在线看| 久久成人18免费观看| 蜜桃视频在线观看一区| 无码av中文一区二区三区桃花岛| 亚洲成人精品在线观看| 欧美tickling挠脚心丨vk| 99精品视频在线播放观看| 日韩黄色小视频| 免费久久99精品国产| 国产精品亚洲专一区二区三区| 黄一区二区三区| 久久久久国产精品厨房| 成人性生交大片免费看在线播放| 国产精品视频yy9299一区| 在线电影院国产精品| 欧美精品自拍偷拍| 久久亚洲二区三区| 综合久久一区二区三区| 亚洲一区二区三区小说| 日韩国产成人精品| 国产91丝袜在线观看| 国产在线精品一区二区不卡了| 欧美日韩精品一区二区天天拍小说 | 国产真实乱子伦精品视频| 成人少妇影院yyyy| 欧美剧情电影在线观看完整版免费励志电影 | 国产乱人伦偷精品视频不卡| 99国产麻豆精品| 制服丝袜激情欧洲亚洲| 亚洲伊人伊色伊影伊综合网| 国模一区二区三区白浆| 在线一区二区三区四区五区| 欧美成人综合网站| 亚洲一区自拍偷拍| 成人免费视频免费观看| 日韩视频一区二区三区在线播放 | 国产乱子伦视频一区二区三区 | 欧美韩国日本一区| 日韩精品每日更新| 91首页免费视频| 久久久国际精品| 日韩中文字幕不卡| jizzjizzjizz欧美| 久久精品夜色噜噜亚洲a∨| 香蕉久久一区二区不卡无毒影院 | 国产精品黄色在线观看| ●精品国产综合乱码久久久久| 日韩电影在线一区| 91免费版pro下载短视频| 精品sm在线观看| 性久久久久久久| 91国内精品野花午夜精品| 久久综合九色综合久久久精品综合| 亚洲一区二区av在线| av中文字幕亚洲| 国产欧美日韩精品一区| 九九九精品视频| 69堂亚洲精品首页| 亚洲最色的网站| 91最新地址在线播放| 国产欧美日韩另类视频免费观看 | 欧美一级艳片视频免费观看| 亚洲乱码中文字幕| 不卡高清视频专区| 国产丝袜美腿一区二区三区| 久久av老司机精品网站导航| 欧美蜜桃一区二区三区| 亚洲高清视频的网址| 麻豆精品一区二区综合av| 在线视频一区二区三| 精品亚洲成av人在线观看| 日韩欧美专区在线| 粉嫩aⅴ一区二区三区四区五区 | 欧美日韩激情一区| 午夜免费久久看| 久久久久久综合| 欧美专区亚洲专区| 日韩午夜在线播放| 久久国产生活片100| 91精品国产福利在线观看| 亚洲黄色在线视频| 色婷婷一区二区| 亚洲卡通动漫在线| 色成年激情久久综合| 一区二区三区在线视频观看 | 欧美日韩一区二区三区免费看| 亚洲精品免费在线观看| 欧美综合一区二区三区| 亚洲成a人v欧美综合天堂下载 | 在线观看亚洲一区| 亚洲电影一区二区三区| 欧美日韩一区三区四区| 日韩二区三区在线观看| 日韩午夜小视频| 国内精品国产成人国产三级粉色 | 激情五月婷婷综合网| 国产欧美日韩另类一区| 91啪亚洲精品| 亚洲成年人影院| 91精品国产aⅴ一区二区| 狂野欧美性猛交blacked| 亚洲在线视频免费观看| 国产v日产∨综合v精品视频| 国产精品无码永久免费888| 国产精品一区二区不卡| 亚洲欧洲av一区二区三区久久| 97久久久精品综合88久久| 亚洲成人手机在线| 欧美mv日韩mv| 成a人片亚洲日本久久| 亚洲综合丝袜美腿| 精品国产免费人成在线观看| av亚洲精华国产精华精华 | 91久久精品一区二区| 婷婷一区二区三区| 久久综合久久综合九色| 99久久精品情趣| 日本免费在线视频不卡一不卡二| 久久久亚洲综合| 91福利小视频| 蜜臀av性久久久久av蜜臀妖精 | 国产精品一区二区久久精品爱涩 | 青青草原综合久久大伊人精品 | 久久久综合激的五月天| 91女神在线视频| 欧美亚男人的天堂| 在线中文字幕不卡| 欧美日韩亚洲高清一区二区| 综合亚洲深深色噜噜狠狠网站| 国产精品二区一区二区aⅴ污介绍| 国产精品素人视频| 一区二区三区中文在线| 国产不卡一区视频| 久久精品亚洲麻豆av一区二区| 一本大道av伊人久久综合| 麻豆精品一区二区| 最新日韩在线视频| 日韩免费在线观看| 色婷婷av一区| 国产精品夜夜嗨| 日本午夜一本久久久综合| 国产精品久久久久久久第一福利| 欧美一级国产精品| 在线一区二区视频| 丁香一区二区三区| 亚洲丶国产丶欧美一区二区三区| 国产欧美一区在线| 欧美精品丝袜中出| 国产精品久久久久三级| 91天堂素人约啪| 久久99精品久久久| 亚洲一区日韩精品中文字幕| 国产欧美日韩亚州综合 | 91精品国产综合久久香蕉麻豆| 国产成人8x视频一区二区| 肉色丝袜一区二区| 伊人一区二区三区| 亚洲视频 欧洲视频| 中文成人综合网| 欧美精品一区二区三区一线天视频| 欧美午夜精品一区二区蜜桃| 99久久久国产精品| 成人免费av在线| 国精品**一区二区三区在线蜜桃| 日韩极品在线观看| 亚洲第一福利视频在线| 亚洲三级免费电影| 中文字幕一区二区不卡| 欧美极品另类videosde| 久久久美女毛片| 亚洲精品在线电影| 欧美tickle裸体挠脚心vk| 日韩三级精品电影久久久| 日韩午夜在线播放| 日韩一区二区在线观看视频| 欧美二区乱c少妇|