2014-01-06 72 views
1

我想在Windows上更改netcat應用程序的源代碼。 目標是在源代碼中聲明參數並構建它,所以我只需要啓動程序 並且它正在工作。在windows上構建netcat,在源代碼中編輯argv參數

源代碼的第一線如下:

main (argc, argv) 
int argc; 
char ** argv; 

而且我想改變它像

argv = "commandline arguments": 

我不同的解決方案 試了一下(很長),但它不起作用 我想我需要一個指針解決方案......但我當然不確定。

+0

那麼你的意思是你不希望通過在命令行參數,而是爲程序內部設置默認值? –

+1

C或C++?請選擇一個...... –

+0

請不要使用K&R式函數定義... – mafso

回答

1

您需要創建一個指向可變字符串的指針數組,終止於NULL。還請記住argv[0]代表程序名稱,而不是提供的參數。例如,如果你想netcat來表現,就好像它是用命令nc -l -p 80調用,你可以這樣做:

char arg0[] = "nc"; 
char arg1[] = "-l"; 
char arg2[] = "-p"; 
char arg3[] = "80"; 
char *fixed_argv[] = { arg0, arg1, arg2, arg3, NULL }; 

argc = 4; 
argv = fixed_argv; 
+0

非常感謝,它的作品! 我發現這不是問題,我有一個解決方案之前,但我想使用-e選項不包括在源中,但在exe文件中,所以它不能工作。 – jonadev95

0

argv持有指針數組到字符串本身:

char *my_argv[] = { 
    "arg 0", 
    "arg 1", 
    "arg 2", 
    "...", 
    "arg N", 
    NULL 
}; 

int my_argc = N; 

從那裏,這是一般最簡單的現有main重命名爲其他名稱,然後創建一個新main調用重命名的版本:

int main(){ 
    // argv & argc from above 

    return renamed_main(my_argc, my_argv); 
} 
+1

'argv'應該是'NULL'終止的,並且這些字符串本身必須是可變的(所以字符串文字不適合)。 – caf

+0

@caf:是的,這就是啓動代碼需要做的事情。除非原來的「主」真的是瘋了,否則都不是必需的。添加一個NULL終結符是很容易的,但你可能會覺得這個字符串是可變的,除非你真的需要它(在這種情況下,如前所述,現有的代碼確實是瘋了,而且應該被重寫)。 –

+0

很容易想象其命令行參數全都不區分大小寫的代碼,因此將參數字符串就地轉換爲小寫以便使用strcmp()比較它們...... – caf