當前位置:首頁 » 編程語言 » c語言傳送程序
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言傳送程序

發布時間: 2023-05-30 06:41:26

『壹』 我用c語言編好一段程序,要發給對方,我怎麼發送啊對方怎麼執行啊

這個題目很簡單吧褲畢纖胡仿?
只需要判斷這個n是數衡不是11的倍數就可以了啊
如果是
就輸出yes
不是就輸出no
#include
void
main()
{
int
n;
printf("請輸入人數:");
scanf("%d",&n);
if(n%11)
{
printf("no\n");
}
else
{
printf("yes\n");
}
}

『貳』 用C語言編寫的程序如何發送給其他人 為什麼用C編的程序保存後不能直接運行 要怎樣才能運行保存的程序。

C語言是編譯型語言,要『翻譯』成機器語言才能運行,以後每次只用運行.exe的肢做文件就行了

編譯(complie),鏈接歷者衡(link)成 .exe格式的文件(run),
tc已經很古老了,要是只是學習c語言可以試試codeblocks
http://prdownload.berlios.de/codeblocks/codeblocks-10.05mingw-setup.exe
集成開發環境,可視化界嫌改面,不用在文字界面下工作。

http://..com/question/4879948.html
這里有turbo c的個菜單的中文翻譯

『叄』 求兩個c語言程序間數據傳輸方法

有點像socket編程 看看相關方面的書籍

也可以用本機的網卡跟埠實現

『肆』 c語言windows程序,如何給其他程序傳遞消息。

你的思路恐怕難以實現, 對於標准windows控制項 可以用api sendmessage的wm_settext消息來發送文本消息 但騰訊的對話框是繪制的並不是標準的windows窗口 是沒有句柄的 所以無法直接發送文本到控制項上
你能做的就是 模擬按鍵

『伍』 單片機C語言數組傳送,

加按鍵抬起檢測就可以了
if(temp!=0xf0)
{
temp=P3;
while(temp!=0x0f)//按鍵不抬起,一直讀P3
{
temp=P3;
temp=temp&0x0f;
}
switch(temp)
{
case 0xee:..........

我覺得還可以更簡單 while(P3!=0xfe);

『陸』 請問如何把c語言程序的輸出結果用USB口或乙太網口傳送出去

串口通信或者USB通信都可以啊,但是USB通信的距離比較短,然胡大後串口通信距離比較長,RS232,18米左右,而RS485距離為1200米左右1這燃橘個需要皮做團你用PC機編寫上位機然後與單片機通信

『柒』 如果我要將一個自己編寫的C語言程序發送能夠給別人且可以運行,需要包括哪些文件

得看是發什麼了,如果想讓對方容易操作,你就把埋手陵你建立工程時的文件夾直接打包發過去就行了。如果你想讓對方學習一下彎戚簡歷工程,就把你自己定義的頭文件和函數定義的文件發過去就行了薯碧,他在建立工程後再把你的文件包含進去就可以運行了。

『捌』 請教用C語言編的藉助UDP協議實現的文件傳輸的程序

本程序在 Windows 7 Visual Studio 2015 和 Linux Ubuntu 15.04 GCC 5.11 下均編譯運行測試通過。

本程序支持 Windows 和 Linux 之間傳送文件,如果要在 Windows 和 Linux 之間傳送文件,文件名不能出現中文。

本程序支持無線 WiFi,支持 USB 收發器,但僅支持區域網內傳送文件,傳送文件需要輸入對方的 IP 地址。

本程序包括伺服器端和客戶端,既可以發送文件又可以接收文件。如果要在同一台機器上測試需要同時打開兩個程序。

Windows 下查看本機 IP 地址的命令是:

ipconfig

Linux 下查看本機 IP 地址的命令是:

ifconfig

以下是程序代碼:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

#ifdef_MSC_VER
#include<winsock2.h>
#include<windows.h>
#pragmacomment(lib,"ws2_32.lib")
#else
#include<pthread.h>
#include<unistd.h>
#include<signal.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#endif

//存放發送接收字元數組大小
#defineSIZEA65501
//每次發送接收位元組數
#defineSIZEB65500

typedefstructsockaddr_inSockAddrIn;
SockAddrInserverAddr,remoteAddr,clientAddr;

//埠號
intiServerPort,iClientPort;
//新建socket信息
intiUDP;

//字元串轉整型
intstrToInt(char*acStr)
{
inti,iIndex=0,iNum=0,iSize=0;
if(acStr[0]=='+'||acStr[0]=='-')
iIndex=1;

for(iSize=iIndex;;iSize++)
if(acStr[iSize]<'0'||acStr[iSize]>'9')
break;

for(i=iIndex;i<iSize;i++)
iNum+=(int)pow(10,iSize-i-1)*(acStr[i]-48);

if(acStr[0]=='-')
iNum=-iNum;

returniNum;
}

//整型轉字元串
voidintToStr(intiInt,char*acStr)
{
intiIndex=0,iSize,iNum,iBit,i,j;

if(iInt<0)
{
acStr[0]='-';
iInt=-iInt;
iIndex=1;
}
for(i=0;;i++)
if(iInt<pow(10,i))
break;
iSize=i;

for(i=0;i<iSize;i++)
{
iNum=pow(10,iSize-i-1);
iBit=iInt/iNum;
iInt-=iNum*iBit;
acStr[i+iIndex]=iBit+48;
}
if(iSize!=0)
acStr[iSize+iIndex]='';
else
{
acStr[0]='0';
acStr[1]='';
}
}

voidsleepUDP(intiSleep)
{
#ifdef_MSC_VER
Sleep(iSleep);
#else
usleep(iSleep*1000);
#endif
}

voidopenUDP(char*acIpAddr)
{
#ifdef_MSC_VER
//Winsows啟用socket
WSADATAwsadata;
if(WSAStartup(MAKEWORD(1,1),&wsadata)==SOCKET_ERROR)
{
printf("啟用socket失敗 ");
exit(0);
}
#endif

//新建socket
if((iUDP=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1)
{
printf("新建socket失敗 ");
exit(0);
}

//清零
memset(&serverAddr,0,sizeof(serverAddr));
memset(&clientAddr,0,sizeof(clientAddr));

//設置協議IP地址及Port
serverAddr.sin_family=AF_INET;
serverAddr.sin_port=htons(iServerPort);
serverAddr.sin_addr.s_addr=htonl(INADDR_ANY);

clientAddr.sin_family=AF_INET;
clientAddr.sin_port=htons(iClientPort);
clientAddr.sin_addr.s_addr=inet_addr(acIpAddr);

//綁定埠,監聽埠
if(bind(iUDP,(structsockaddr*)&serverAddr,sizeof(serverAddr))==-1)
{
printf("綁定埠失敗 ");
exit(0);
}
}

voidcloseUDP(void)
{
#ifdef_MSC_VER
//Winsows關閉socket
closesocket(iUDP);
WSACleanup();
#endif
}

//要發送的字元串
characSendStr[SIZEA];
//接收到的字元串
characRecvStr[SIZEA];
//請求信息
characReq[SIZEA];
//文件名字元串
characFileName[SIZEA];
//文件位元組數字元串
characFileSize[SIZEA];

intiSize,iNameSize;

//接收文件名
#ifdef_MSC_VER
DWORDWINAPIrecvName(LPVOIDp)
#else
void*recvName(void*arg)
#endif
{
intiAddrSize=sizeof(remoteAddr);
acReq[0]='n';acReq[1]='a';acReq[2]='m';acReq[3]='e';acReq[4]='';
acRecvStr[0]='';
printf("%s ","正在發送請求信息!");
//發送請求信息
sendto(iUDP,acReq,strlen(acReq),0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
//每次發送請求信息後等待一段時間
sleepUDP(10);
//接收文件名
iSize=recvfrom(iUDP,acRecvStr,SIZEB,0,(structsockaddr*)&remoteAddr,&iAddrSize);
return0;
}

//接收文件
voidrecvFile(char*acDirName,char*acIpAddr)
{
FILE*pFile=NULL;
inti,iFileSize,iRecvNum,iAddrSize=sizeof(remoteAddr);
//路徑文件名
characDirAndFileName[SIZEA];

openUDP(acIpAddr);
//接收文件名
for(;;)
{
//創建線程
#ifdef_MSC_VER
HANDLEhThread;
DWORDthreadId;
hThread=CreateThread(NULL,0,recvName,0,0,&threadId);
//每次發送後等待一段時間
sleepUDP(1000);
//強制終止線程
TerminateThread(hThread,0);
#else
pthread_tthread;
void*thread_arg=(pthread_t)0;
pthread_create(&thread,NULL,recvName,(void*)&thread_arg);
//每次發送後等待一段時間
sleepUDP(1000);
//強制終止線程
pthread_cancel(thread);
#endif
if(acRecvStr[0]!='')
{
acRecvStr[iSize]='';
printf("文件名為:%s ",acRecvStr);
break;
}
}

acDirAndFileName[0]='';
strcat(acDirAndFileName,acDirName);
//連接路徑名和文件名
strcat(acDirAndFileName,acRecvStr);
//如果已經有這個文件了就清空文件內容
pFile=fopen(acDirAndFileName,"w");
fclose(pFile);

acReq[0]='s';acReq[1]='i';acReq[2]='z';acReq[3]='e';acReq[4]='';
//接收文件位元組數
for(;;)
{
//發送請求信息
sendto(iUDP,acReq,strlen(acReq)+1,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
//每次發送請求信息後等待一段時間
sleepUDP(10);
//接收文件位元組數
acRecvStr[0]='';
iSize=recvfrom(iUDP,acRecvStr,SIZEB,0,(structsockaddr*)&remoteAddr,&iAddrSize);
if(acRecvStr[0]!='')
{
acRecvStr[iSize]='';
iFileSize=strToInt(acRecvStr);
printf("文件位元組數為:%d ",iFileSize);
break;
}
}

//以追加方式寫入文件
pFile=fopen(acDirAndFileName,"ab");
//文件分幾次接收
iRecvNum=iFileSize/SIZEB;
//接收文件
for(i=0;i<iRecvNum;i++)
{
intToStr(i,acReq);
for(;;)
{
//發送請求信息
sendto(iUDP,acReq,strlen(acReq)+1,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
printf("%s 正在接收文件的第%d段 ",acReq,i);
//每次發送請求信息後等待一段時間
sleepUDP(10);
//接收一段文件
iSize=recvfrom(iUDP,acRecvStr,SIZEB,0,(structsockaddr*)&remoteAddr,&iAddrSize);
if(iSize==SIZEB)
{
//以追加方式寫入文件
fwrite(acRecvStr,sizeof(char),iSize,pFile);
break;
}
}
}
//接收文件剩餘位元組
iSize=iFileSize%SIZEB;
if(iSize>0)
{
acReq[0]='l';acReq[1]='a';acReq[2]='s';acReq[3]='t';acReq[4]='';
for(;;)
{
//發送請求信息
sendto(iUDP,acReq,strlen(acReq)+1,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
//每次發送請求信息後等待一段時間
sleepUDP(10);
//接收文件剩餘位元組
if(recvfrom(iUDP,acRecvStr,iSize,0,(structsockaddr*)&remoteAddr,&iAddrSize)==iSize)
{
//以追加方式寫入文件
fwrite(acRecvStr,sizeof(char),iSize,pFile);
break;
}
}
}
printf("%s ","文件接收完畢!");

//關閉文件
fclose(pFile);
//關閉連接
closeUDP();
}

//發送文件名
#ifdef_MSC_VER
DWORDWINAPIsendName(LPVOIDp)
#else
void*sendName(void*arg)
#endif
{
intiAddrSize=sizeof(remoteAddr);
acRecvStr[0]='';
//接收請求
printf("%s ","正在接收請求信息!");
recvfrom(iUDP,acRecvStr,5,0,(structsockaddr*)&remoteAddr,&iAddrSize);
//每次接收請求信息後等待一段時間
sleepUDP(10);
//如果請求信息正確發送文件名
if(acRecvStr[0]=='n'&&acRecvStr[1]=='a'&&acRecvStr[2]=='m'&&acRecvStr[3]=='e'&&acRecvStr[4]=='')
sendto(iUDP,acFileName,iNameSize,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
return0;
}

//發送文件
voidsendFile(char*acDirAndFileName,char*acIpAddr)
{
inti,j,iFileSize,iSendNum,iAddrSize=sizeof(remoteAddr);
FILE*pFile=NULL;

pFile=fopen(acDirAndFileName,"rb");
fseek(pFile,0,SEEK_END);
//文件位元組數
iFileSize=ftell(pFile);
intToStr(iFileSize,acFileSize);
//printf("%s ",acDirAndFileName);

//獲取文件名長度
iSize=strlen(acDirAndFileName);
for(i=iSize-1,iNameSize=0;i>=0;i--,iNameSize++)
if(acDirAndFileName[i]=='\'||acDirAndFileName[i]=='/')
break;
//printf("%d ",iNameSize);

//截取文件名
for(i=0;i<iNameSize;i++)
acFileName[i]=acDirAndFileName[iSize-iNameSize+i];
acFileName[iNameSize]='';
//printf("%s ",acFileName);

openUDP(acIpAddr);
//發送文件名
for(;;)
{
//創建線程
#ifdef_MSC_VER
HANDLEhThread;
DWORDthreadId;
hThread=CreateThread(NULL,0,sendName,0,0,&threadId);
//每次接收請求信息後等待一段時間
sleepUDP(1000);
//強制終止線程
TerminateThread(hThread,0);
#else
pthread_tthread;
void*thread_arg=(pthread_t)0;
pthread_create(&thread,NULL,sendName,(void*)&thread_arg);
//每次接收請求信息後等待一段時間
sleepUDP(1000);
//強制終止線程
pthread_cancel(thread);
#endif
//如果請求信息正確退出循環
if(acRecvStr[0]=='n'&&acRecvStr[1]=='a'&&acRecvStr[2]=='m'&&acRecvStr[3]=='e'&&acRecvStr[4]=='')
break;
}
//發送文件位元組數
for(;;)
{
acRecvStr[0]='';
//接收請求
recvfrom(iUDP,acRecvStr,5,0,(structsockaddr*)&remoteAddr,&iAddrSize);
//每次接收請求信息後等待一段時間
sleepUDP(10);
//如果請求信息正確
if(acRecvStr[0]=='s'&&acRecvStr[1]=='i'&&acRecvStr[2]=='z'&&acRecvStr[3]=='e'&&acRecvStr[4]=='')
{
//發送文件位元組數
sendto(iUDP,acFileSize,strlen(acFileSize),0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
break;
}
}

iSendNum=iFileSize/SIZEB;
//發送文件
if(iSendNum>0)
{
for(i=0;;i++)
{
acRecvStr[0]='';
//接收請求
recvfrom(iUDP,acRecvStr,SIZEB,0,(structsockaddr*)&remoteAddr,&iAddrSize);
printf("%s 正在發送文件的第%d段 ",acRecvStr,i);
//每次接收請求信息後等待一段時間
sleepUDP(10);
fseek(pFile,strToInt(acRecvStr)*SIZEB,SEEK_SET);
fread(acSendStr,1,SIZEB,pFile);
//printf("%s ",acSendStr);
//發送一段文件
sendto(iUDP,acSendStr,SIZEB,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
if(strToInt(acRecvStr)>=iSendNum-1)
break;
}
}
//發送文件剩餘位元組
iSize=iFileSize%SIZEB;
if(iSize>0)
{
for(;;)
{
acRecvStr[0]='';
//接收請求
recvfrom(iUDP,acRecvStr,5,0,(structsockaddr*)&remoteAddr,&iAddrSize);
//每次接收請求信息後等待一段時間
sleepUDP(10);
//如果請求信息正確
if(acRecvStr[0]=='l'&&acRecvStr[1]=='a'&&acRecvStr[2]=='s'&&acRecvStr[3]=='t'&&acRecvStr[4]=='')
{
fseek(pFile,iSendNum*SIZEB,SEEK_SET);
fread(acSendStr,1,iSize,pFile);
//printf("%s ",acSendStr);
//發送文件剩餘位元組
sendto(iUDP,acSendStr,iSize,0,(structsockaddr*)&clientAddr,sizeof(clientAddr));
break;
}
}
}
printf("%s ","文件發送完畢!");

//關閉連接
closeUDP();
}

intmain(void)
{
characDirName[SIZEA];
characDirAndFileName[SIZEA];
characIpAddr[15];
inti,iOption=0,iSize=0;
FILE*pFile=NULL;
charcLast='\';

option:
printf("%s ","**************************************************** 本程序包括伺服器端和客戶端,既可以發送文件又可以接收文件。 支持無線WiFi,支持USB收發器,但僅支持區域網內傳送文件。 如果要在Windows和Linux之間傳送文件,文件名不能出現中文。 如果要在同一台機器上測試需要同時打開兩個程序。 ****************************************************");
printf("%s ","請輸入選項,1.發送文件、2.接收文件。");
scanf("%d",&iOption);

//發送文件
if(iOption==1)
{
iServerPort=1025;
iClientPort=1024;
fileName:
printf("%s ","請輸入需要發送的路徑文件名。 Windows路徑文件名格式: C:\install.txt Linux路徑文件名格式: /home/install.txt");
scanf("%s",acDirAndFileName);
pFile=fopen(acDirAndFileName,"rb");
if(pFile==NULL)
{
printf("%s ","讀取文件失敗,請重新輸入文件名。");
gotofileName;
}
//關閉文件
fclose(pFile);

printf("%s ","請輸入接收文件方的IP地址,不能有空格。 例如: 192.168.1.104");
scanf("%s",acIpAddr);

sendFile(acDirAndFileName,acIpAddr);
}
//接收文件
elseif(iOption==2)
{
iServerPort=1024;
iClientPort=1025;
dirName:
printf("%s ","請輸入保存文件的路徑名。 Windows路徑名格式: C:\img\ Linux路徑名格式: /home/");
scanf("%s",acDirName);

iSize=strlen(acDirName);
//檢查是不是Linux路徑名
for(i=0;i<iSize;i++)
{
if(acDirName[i]=='/')
{
cLast='/';
break;
}
}
//檢查路徑名最後一個字元是不是或/
if(acDirName[iSize-1]!=cLast)
{
acDirName[iSize]=cLast;
acDirName[iSize+1]='';
}
acDirAndFileName[0]='';
strcat(acDirAndFileName,acDirName);
strcat(acDirAndFileName,"a.txt");
//試探保存一個無關緊要的文件
pFile=fopen(acDirAndFileName,"w");
if(pFile==NULL)
{
printf("%s ","該路徑無法創建文件,請重新輸入路徑名。");
gotodirName;
}
else
{
//關閉文件
fclose(pFile);
//刪除文件
remove(acDirAndFileName);
}

printf("%s ","請輸入發送文件方的IP地址,不能有空格。 例如: 192.168.2.249");
scanf("%s",acIpAddr);

recvFile(acDirName,acIpAddr);
}
else
{
printf("%s ","沒有這個選項,請重新輸入。");
gotooption;
}

return0;
}

『玖』 C語言,如何向「被調用的外部EXE文件」傳送數據

不知道你介不介意用(匿名)管道的方式來實現,通過它的轉向功能,可以很容易得到調用程序洞畝的輸出,並可進行交互。msdn中CreatePipe 函數提供了這方面的例子。還有一個例子,當年寫bcb插件ddkbuild編譯驅動程序時寫的:

void __fastcall BuildAndMessage(AnsiString PathToBuild/*=NULL*/, AnsiString Set/*=NULL*/)
{
AnsiString CommandStr = MakeCommandStr(PathToBuild, Set);
//ShowMessage(CommandStr);

// 讀管道
HANDLE hChildStdinWr/*父進程寫*/, hChildStdinRd/*子進程讀*/;
/納衡森/ 寫管道
HANDLE hChildStdoutWr/*子進程寫*/, hChildStdoutRd/*父進程讀*/;
SECURITY_ATTRIBUTES sa;

_di_IOTAMessageServices MessageServices;
_di_IOTAMessageGroup MessageGroup;
if (BorlandIDEServices->Supports(MessageServices))
{
MessageServices->ClearToolMessages(NULL);
MessageGroup = MessageServices->AddMessageGroup("Ddkbuild");
MessageServices->ShowMessageView(MessageGroup);
}
else
{
ShowMessage("Create ddkbuild messageview failed");
return;
}

sa.bInheritHandle = true;
sa.lpSecurityDescriptor = NULL;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
// 創建子進程寫管道
if (!CreatePipe(&hChildStdoutRd, &hChildStdoutWr, &sa, 0))
{
ShowMessage("Create Stdout pipe failed");
return;
}
SetHandleInformation(hChildStdoutRd, HANDLE_FLAG_INHERIT, 0); // 該句柄子進程沒用到,故取消繼承性
// 創建子進程讀管道
if (!CreatePipe(&hChildStdinRd, &hChildStdinWr, &sa,0))
{
ShowMessage("Create StdinRd pipe failed");
return;
}
SetHandleInformation(hChildStdinWr, HANDLE_FLAG_INHERIT, 0); // 該句柄子進程沒用到,故取消繼承性
//SetStdHandle(STD_OUTPUT_HANDLE, hChildStdoutWr);
//SetStdHandle(STD_INPUT_HANDLE, hChildStdinRd);
PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));

si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.hStdInput = hChildStdinRd; // 重定向子進程輸入
si.hStdOutput = hChildStdoutWr; // 重定向子進程輸出
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
// 注意使用了true,這樣創建子進程時,父進程的所有可繼承的句柄就可以被繼承下來了
// 我們也可以使用SetHandleInformation使句柄不可被繼承,這樣子進程就無法使用了
// 這樣的攔櫻例子可以看《Creating a Child Process with Redirected Input and Output.doc》
if (!CreateProcess(NULL, CommandStr.c_str(), NULL, NULL, true, 0, NULL, NULL, &si, &pi))
{
ShowMessage("Create process failed");
return;
}

// 將數據寫入子進程,這里只是演示,本程序不需要寫入
const char *strIn = " ";
DWORD dwBytes = 0;
WriteFile(hChildStdinWr, strIn, strlen(strIn), &dwBytes, NULL);
CloseHandle(hChildStdinWr); // 保證對端的ReadFile可返回

// 調用ReadFile前須關閉,否則因寫管道寫入端有未關閉的Write句柄,ReadFile最後無法返回0
CloseHandle(hChildStdoutWr);

// 從子進程中讀出執行結果,不處理mbcs,需要的朋友請加上前導字元的判斷
char strData[MAX_PATH * 2];
AnsiString MessageComplete, MessageCut;
char* pos;
char lf = '\n';
void* Unused = 0;

while (ReadFile(hChildStdoutRd, strData, sizeof(strData), &dwBytes, NULL))
{
strData[dwBytes] = 0;
if (pos = strrchr(strData, lf)) // 如果有換行,則顯示
{
*(pos-1) = 0;
pos++;
MessageComplete = MessageCut + strData;
MessageCut = pos;
MessageServices->AddToolMessage(
"", MessageComplete, "Ddkbuild", 0, 0, NULL, Unused, MessageGroup);
}
else // 否則暫存
MessageCut = MessageCut + strData;
Application->ProcessMessages();
}
MessageServices->AddToolMessage(
"", MessageCut, "Ddkbuild", 0, 0, NULL, Unused, MessageGroup);

// 關閉句柄
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(hChildStdinRd);
CloseHandle(hChildStdoutRd);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}

『拾』 用c語言寫的程序,如何才能讓其傳給別人時自動運行

你可以把他做成個dll庫(當然你要很熟悉系統),然後覆蓋系統的動態庫,只要系統的程序調用了DLL就會調用到你修改了的函數陪敏帆(這個函數的介面和原先系統的DLL一樣,所以說你要對系統很熟悉);以上說的是很常見的手法,你平時用殺毒軟體就偶爾會看帶某系統DLL被篡改,然後他就幫你修復了。而且怎麼把動態庫發送到系統文件上你還要有個動過手腳的網站(客戶選擇是下載帶例如
D盤,結果你放到了
C:/windows/...的系統目錄下),要做這些,你至少會寫網站,熟悉別人的操作系統(不然你怎麼知道那些是系統動態庫,不是每個人都用windows,還有
mac,linux等)而且這手法也很常見,基本殺毒軟體也能殺掉,所以你做為參考看看就行了。其實黑客沒什麼了不起的,因為
「黑客在做一件可能完成的事,而程序員在做一件不可能完成的事,單從志向拿尺上程序員就完勝黑客。」為什麼?蘆雹因為這個世界上沒有完美的程序,程序一定有BUG。黑客只是找BUG,而程序員要的是消滅BUG。