第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么 C# 編組字符串不能與 C++ DLL 一起使用

為什么 C# 編組字符串不能與 C++ DLL 一起使用

C#
慕標(biāo)琳琳 2023-06-25 14:34:19
我在將字符串傳遞到外部 DLL 中的某個(gè)函數(shù)時(shí)遇到問題。我會(huì)發(fā)布一個(gè)實(shí)際的代碼片段,但它有點(diǎn)混亂并且可能難以閱讀。以下片段是我的個(gè)人代碼的概要。C# 文件(UNICODE)[DllImport("InjectDll.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]private static extern ulong FindProgramProcessId(string procName);[DllImport("InjectDll.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]private static extern bool InjectIntoProcess(ulong procId, string Dll);string ProcName = "random_test_game.exe";string DllPath = @"C:\ProgramData\Hack\File.dll";ulong procId = FindProgramProcessId(ProcName);bool Injected = InjectIntoProcess(procId, DllPath);C++ 文件 (ANSI)DllExport DWORD FindProgramProcessId(const char* procName){    ...}DllExport bool InjectIntoProcess(DWORD procId, const char* Dll){    if (Dll == nullptr)    {        MessageBox(NULL, "DLL", "EMPTY", MB_OK);        return false;    }    ...}C++ 頭文件#pragma once#include <Windows.h>#include <TlHelp32.h>#include <string>#ifdef EXPORT#define DllExport __declspec(dllexport)#else#define DllExport __declspec(dllimport)#endifextern "C" DllExport DWORD FindProgramProcessId(const char* procName);extern "C" DllExport bool InjectIntoProcess(DWORD procId, const char* Dll);引用代碼片段,出現(xiàn)的問題是 FindProgramProcessId 將成功傳遞一個(gè)字符串,沒有問題,但 InjectIntoProcess 將const char* Dll根據(jù)nullptr我在該方法中放入的“額外”代碼顯示。請(qǐng)注意,我嘗試傳遞 anIntPtr代替string和 using Marshal.StringToHGlobalAnsi,但仍然遇到Dll == nullptr問題。它破壞了我的代碼。更多相同信息可以在我的GuidedHacking線程中找到。
查看完整描述

1 回答

?
慕田峪4524236

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊

Win32DWORD是32位整數(shù),而C#ulong是64位整數(shù)?;靵y源于以下事實(shí):DWORD是 的別名unsigned long,但 C++long不一定是 64 位(事實(shí)上,在 MSVC 中,它是 32 位;unsigned long long是 64 位無(wú)符號(hào)整數(shù))。

由于您使用的是 cdecl 調(diào)用約定,調(diào)用者負(fù)責(zé)清理堆棧(因此不會(huì)發(fā)生崩潰),并且參數(shù)從右到左傳遞(因此最終指向傳遞給 的Dll值中間的某個(gè)位置procId,這可能包含零)。或者至少這是我的猜測(cè),因?yàn)槲覀兲幱谖炊x的行為領(lǐng)域。

您應(yīng)該聲明 as 的返回值FindProgramProcessId和asprocId的參數(shù)。InjectIntoProcessuint


查看完整回答
反對(duì) 回復(fù) 2023-06-25
  • 1 回答
  • 0 關(guān)注
  • 170 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)