Tôi muốn thay đổi logic của exe bằng cách thay đổi nhị phân. Một trong các giá trị hex trong exe là 75 và tôi phải thay đổi nó thành 74 (JNE thành JE trong cụm x86). Tôi biết đó là byte thứ 1276 của tệp, nhưng làm cách nào để thực hiện điều đó?
Đây là những gì tôi có:
#include
#include
int main(void)
{
TẬP TIN *fileH = fopen ("foo", "r+");
fseek(fileH, 1276, SEEK_SET);
fwrite("74", 1, 1, fileH);
fclose(fileH);
return 0;
}
Ngoài ra, vì lý do nào đó, tôi nhận được "fileH" không được khai báo mặc dù tôi bao gồm stdio và FILE trong tất cả các chữ hoa. Tôi không thể tìm thấy bất cứ ai khác có vấn đề này. chạy cái này trên Ubuntu
Bạn phải xác định giá trị byte để ghi vào tệp. JE
Mã opcode 8086 ở dạng thập lục phân 74
, thay vì số thập phân.
#include
int main(void)
{
byte char không dấu = 0x74;
TẬP TIN *fileH = fopen ("foo.txt", "r+");
nếu (tệpH == NULL)
return 1;
if (fseek(fileH, 3, SEEK_SET))
return 1;
if (fwrite(&byt, 1, 1, fileH) != 1)
return 1;
if (fclose(fileH))
return 1;
printf("Tập tin đã được cập nhật\n");
return 0;
}
Là bản demo sử dụng tệp văn bản nhỏ, nội dung trước đó:
0123456789
và sau:
012t456789
Tôi không biết tại sao trình biên dịch của bạn từ chối tập tinH
Ngoại trừ đôi khi các trình soạn thảo văn bản để lại một ký tự lừa đảo vô hình ở những nơi không nên có. Giải pháp là xóa và nhập lại dòng vi phạm.
Tôi là một lập trình viên xuất sắc, rất giỏi!