控制台下輸出DLL的除錯資訊

2021-04-09 01:01:51 字數 1863 閱讀 8836

在幻影技術綜合區

看到這個帖子,備忘下

問:在cmd.exe下執行rundll32.exe mydll.dll,myfunc ,本想直接在當前cmd視窗輸出除錯資訊.

可因rundll32是win32 gui程式而非win32 console,所以cmd.exe標準輸入輸出控制代碼無法被mydll.dll繼承用來向父程序cmd.exe輸出資料.

這時, 如果用強行用getstdhandle獲得控制代碼,然後用writeconsole來進行輸出,則會發生無效控制代碼錯誤.

但是如果在這之前先allocconsole,則可正常writeconsole,但是會新建個控制台視窗來輸出資料,很不爽 :-p

有沒有什麼辦法向當前cmd.exe視窗輸出資料呢?

我想通過給程序拍照和遍歷,

可以獲得rundll32的父程序cmd.exe的pid和handle,但如何進一步下去(建立管道, 寫資料)就沒轍了?

不知道有沒有描述清楚 還是太羅嗦了,麻煩大家看看,謝謝~

答:如果只是要輸出資料的話 可以向父視窗 傳送鍵盤訊息 wm_char 輸出你的資料

**

code:

bool apientry dllmain

( handle hmodule

, dword  ul_reason_for_call

, lpvoid lpreserved )

return

true

; }

void showme

() code:

dword findparentprocid

(dword dwchildprocid

)        

//找到返回父程序pid, 找不到返回-1

; pr32

.dwsize

= sizeof

(processentry32

);   

// 不要漏了這句

// 提權先

debugprivilege

(se_debug_name

, true

);    

// 給程序照相

handle hsnap

= createtoolhelp32snapshot(,

0);

// 拍照失敗, 返回-1

if (

hsnap

== (

handle)-1

) return (

dword)-1

; // 開始列舉...

if (

process32first

(hsnap

,&pr32

) ==

false

)  

do }

while(

process32next

(hsnap

, &pr32

));

// 找不到父程序id, 返回-1

closehandle

(hsnap

); return -1;

}code:

typedef struct tagwndinfo

wndinfo

, *lpwndinfo

; bool callback yourenumproc

(hwnd hwnd

,lparam lparam)

return

true

; }

hwnd getproces**ainwnd

(dword dwprocessid

)        

// 找到返回程序主視窗的hwnd, 如果沒有,返回null

控制台下輸出菱形的作業

這是在控制台下輸出的菱形 using system using system.collections.generic using system.linq using system.text namespace 菱形製作 for z 1 z m z console.write n m 2 else f...

MFC工程加入控制台除錯資訊輸出

本人將網上兩篇側重點不同的文章組合起來形成了下面這篇文章。實踐有效。taken from internet and used in internet 1.例項工程名為demo,在cdemodlg.h中加入 include define debug ifdef debug define debug f...

Eclipse控制台輸出資訊的控制

當你在eclipse中 running debugging乙個應用程式的時候,有關該應用程式的執行除錯資訊及日誌資訊都會輸出到控制台 console 顯示,但是eclipse只會顯示最後一部分的日誌資訊,如果你的應用程式會產生大量的執行除錯資訊及日誌資訊,你可能會想保持這些資訊到檔案中,以便檢視分析...