亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
极品少妇xxxx精品少妇| 亚洲精品第一国产综合野| 精品一二三四在线| www久久久久| 成人精品小蝌蚪| 亚洲欧美日韩成人高清在线一区| 色婷婷久久久久swag精品| 国产呦萝稀缺另类资源| 精品国产人成亚洲区| 国产91丝袜在线播放| 国产精品毛片无遮挡高清| 色哟哟欧美精品| 石原莉奈一区二区三区在线观看| 日韩一级免费观看| 国产成+人+日韩+欧美+亚洲| 亚洲日本一区二区| 91精品国产综合久久精品app| 精品一区二区日韩| 亚洲裸体在线观看| 91精品国产黑色紧身裤美女| 国产精品综合二区| 亚洲精品免费播放| 日韩欧美久久一区| jvid福利写真一区二区三区| 亚洲国产一区在线观看| 精品处破学生在线二十三| av成人老司机| 久久99精品久久只有精品| 国产精品不卡一区| 欧美一区二区在线免费播放| 成人高清在线视频| 免费三级欧美电影| 1024精品合集| 2023国产精华国产精品| 欧美午夜精品久久久久久孕妇| 国模无码大尺度一区二区三区| 一区二区欧美国产| 国产日产亚洲精品系列| 欧美顶级少妇做爰| www.欧美精品一二区| 麻豆精品一区二区av白丝在线| 国产精品免费av| 精品久久一区二区三区| 欧美影视一区在线| 国产呦萝稀缺另类资源| 日韩精品91亚洲二区在线观看| 亚洲免费av高清| 久久精品一区四区| 欧美哺乳videos| 欧美肥妇bbw| 欧美色涩在线第一页| 白白色亚洲国产精品| 激情偷乱视频一区二区三区| 视频一区欧美精品| 亚洲综合免费观看高清在线观看| 中文字幕成人网| 久久午夜羞羞影院免费观看| 911精品国产一区二区在线| 色婷婷av久久久久久久| 99re视频这里只有精品| 成人激情黄色小说| 成人免费视频caoporn| 精彩视频一区二区| 精品亚洲欧美一区| 激情小说欧美图片| 久久精品国产成人一区二区三区 | 91精品欧美综合在线观看最新| av午夜一区麻豆| 成人精品高清在线| 国产成人一区在线| 国产麻豆精品视频| 国产精品一区专区| 国产精品一二三四区| 国产精品一卡二卡在线观看| 国产资源在线一区| 国产精一区二区三区| 国产经典欧美精品| 国产 日韩 欧美大片| 成人av集中营| 色婷婷一区二区三区四区| 91麻豆国产在线观看| 欧美羞羞免费网站| 欧美军同video69gay| 91精品欧美久久久久久动漫 | 久久se这里有精品| 久久成人综合网| 国产精品1区2区3区| 国产一区亚洲一区| 成人一区在线看| 一本大道久久a久久精品综合| 日韩欧美国产综合在线一区二区三区| 91精品国产91久久久久久最新毛片 | 91美女在线观看| 欧洲精品中文字幕| 91精品国产91综合久久蜜臀| 亚洲精品一区二区三区香蕉 | 91麻豆精品在线观看| 欧美色偷偷大香| 日韩免费观看高清完整版| 国产亚洲人成网站| 亚洲乱码中文字幕综合| 日日摸夜夜添夜夜添亚洲女人| 久久av资源站| av电影一区二区| 91精品国产免费| 国产精品福利一区二区| 亚洲成av人片一区二区梦乃 | 国产成人精品免费网站| 在线观看亚洲一区| 精品免费99久久| 亚洲欧美影音先锋| 日本成人在线不卡视频| 粉嫩嫩av羞羞动漫久久久| 欧美亚洲自拍偷拍| 久久久亚洲综合| 午夜精品福利久久久| 国产精品亚洲成人| 欧美日韩一级片网站| 国产三级三级三级精品8ⅰ区| 亚洲欧美一区二区三区极速播放| 日本女优在线视频一区二区| 成人精品免费视频| 欧美一区永久视频免费观看| 中文字幕制服丝袜成人av | 亚洲va韩国va欧美va| 国产乱码精品一区二区三区av| 日本道在线观看一区二区| 26uuu亚洲| 亚洲第一激情av| 99国内精品久久| 欧美精品一区二区三| 国产美女久久久久| 欧美主播一区二区三区| 亚洲国产精品ⅴa在线观看| 日本麻豆一区二区三区视频| 色哟哟在线观看一区二区三区| 欧美成人激情免费网| 五月婷婷激情综合网| 99精品热视频| 国产女同性恋一区二区| 免费日本视频一区| 欧美日韩精品免费观看视频| 国产精品久久久久影视| 黄色资源网久久资源365| 欧美日韩国产经典色站一区二区三区 | 成人在线一区二区三区| 欧美sm美女调教| 日韩一区欧美二区| 欧美剧情电影在线观看完整版免费励志电影 | 欧美日韩国产一级片| 亚洲色图欧洲色图| 99久久精品国产网站| 日本一区二区综合亚洲| 国产精品自拍毛片| 日韩免费观看2025年上映的电影| 天天av天天翘天天综合网| 欧美性猛片xxxx免费看久爱| 一区二区三区美女| 一本色道久久综合亚洲aⅴ蜜桃 | 中文字幕一区不卡| 国产成人在线看| 欧美国产激情二区三区 | 91啪在线观看| 亚洲乱码精品一二三四区日韩在线| 97久久精品人人做人人爽| 中文字幕一区二区三区av| 不卡视频免费播放| 亚洲欧美一区二区三区国产精品 | 丝袜亚洲精品中文字幕一区| 欧洲人成人精品| 午夜精品久久久久久久久| 91精品国产综合久久久蜜臀图片| 日韩精品一二三| 日韩丝袜情趣美女图片| 国内久久婷婷综合| 国产欧美日韩不卡免费| 91免费视频观看| 亚洲成人自拍一区| 欧美一区二区啪啪| 韩国女主播成人在线| 国产欧美日本一区视频| 91免费看片在线观看| 亚洲成人免费视| 91精品免费在线| 国产精品18久久久久久久久| 国产精品九色蝌蚪自拍| 欧美最猛黑人xxxxx猛交| 欧美aaa在线| 欧美国产丝袜视频| a在线欧美一区| 天天综合色天天| 久久久久国产成人精品亚洲午夜| 国产福利电影一区二区三区| 18成人在线观看| 欧美一区二区三区在线看| 国产aⅴ综合色| 图片区日韩欧美亚洲| 337p日本欧洲亚洲大胆色噜噜| 99精品视频中文字幕| 日本人妖一区二区|