在幻影技術綜合區
看到這個帖子,備忘下
問:在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只會顯示最後一部分的日誌資訊,如果你的應用程式會產生大量的執行除錯資訊及日誌資訊,你可能會想保持這些資訊到檔案中,以便檢視分析...