Có thể thực hiện một quá trình có argc = 0 không? Tôi cần phải thực hiện một chương trình nhưng nó là vô cùng quan trọng đối với argc của nó bằng 0. Có cách nào để làm điều đó? Tôi đã cố gắng đặt 2^32 đối số trong dòng lệnh sao cho nó xuất hiện như thể argc = 0 nhưng có giới hạn tối đa đối với số đối số.thực hiện một quá trình với argc = 0
Trả lời
Bạn có thể viết chương trình gọi trực tiếp exec; cho phép bạn chỉ định các đối số dòng lệnh (bao gồm cả tên chương trình) và thiếu nó.
Bạn có thể viết một chương trình C mà spawns/giám đốc điều hành các chương trình khác không có argv, như:
#include <spawn.h>
#include <stdlib.h>
int main(int argc, char** argv, char** envp)
{
pid_t pid;
char* zero_argv[] = {NULL};
posix_spawn(&pid, "./that_app", NULL, NULL, zero_argv, envp);
int status;
waitpid(&pid, &status, NULL);
return 0;
}
Đây có phải là hành vi không xác định không? – user
@user: Không thực sự. Tiêu chuẩn xử lý 'argc' và' argv [0] == 0' như một tình huống hoàn toàn tốt đẹp. Xem [câu hỏi này] (http://stackoverflow.com/questions/2794150/when-can-argv0-have-null). –
Bạn có thể sử dụng hệ thống linux gọi execve().
int execve(const char *filename, char *const argv[], char *const envp[]);
Bạn có thể vượt qua filename của thực thi và một con trỏ null như các argv [] để thực thi nhị phân và argc sẽ bằng không.
Nó là mã thử nghiệm của tôi:
#include <stdio.h>
#include <unistd.h>
int main(void) {
char *argv[]={ NULL };
execv("./target", argv);
return (0);
}
Và strace kết quả là:
execve("./target", [], [/* 20 vars */]) = 0
Bạn có thể sử dụng envp [] để vượt qua các đối số bạn đã định nghĩa anyways.
Hơn nữa, bạn có thể sử dụng ngôn ngữ lắp ráp để đạt được mục tiêu của mình (argc == 0 nhưng bạn vẫn cần phải vượt qua đối số). Tôi cho rằng bạn đang sử dụng môi trường 32 bit x86.
Khái niệm này là:
- cửa hàng 0x0b ($ SYS_execve) vào % eax
- đặt địa chỉ của argv [] vào % ebx
- đặt địa chỉ của envp [] vào % ecx
- sau đó sử dụng int 0x80 để làm một cuộc gọi hệ thống
Cấu trúc bộ nhớ được hiển thị dưới đây:
+--------------------------------------------------+
| +----------------------------------|-----+
v v v------------------|-----|-----+
[arg_0][\0][...][arg_1][\0][...][arg_2][\0][...][ptr0][ptr1][ptr2][\0]
^
| (argv[] = NULL)
+--- envp
tôi tự hỏi rằng nếu bạn đang làm nhiệm vụ phòng thí nghiệm của khóa học được cung cấp bởi Giáo sư Taesoo Kim (GATECH) Liên kết khóa học: https://tc.gtisc.gatech.edu/cs6265
Hoặc là một sự cố CTF (cuộc thi bắt cờ) của hacker?
Điều này không cung cấp câu trả lời cho câu hỏi. Khi bạn có đủ [danh tiếng] (http://stackoverflow.com/help/whats-reputation), bạn sẽ có thể [nhận xét về bất kỳ bài đăng nào] (http://stackoverflow.com/help/privileges/comment); thay vào đó, [cung cấp câu trả lời không yêu cầu làm rõ từ người hỏi] (http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-thay thế). - [Từ đánh giá] (/ đánh giá/bài viết chất lượng thấp/15041212) –
Cố định, cảm ơn bạn. – vegafish
- 1. php thực hiện một quá trình nền
- 2. Hướng dẫn thực hiện quá trình vận hành quá tải?
- 3. pid của quá trình thực hiện hiện tại
- 4. Thực hiện thông báo "quá trình này mất quá nhiều thời gian" với jQuery
- 5. argv [argc] ==?
- 6. thời gian thực hiện bởi quá trình con chia hai
- 7. argc biến Undefined PHP
- 8. Cách thực hiện quy trình với CAP_SYS_RESOURCE
- 9. GNU thực hiện: đảo ngược quá trình thành công?
- 10. Viết để thực hiện quá trình 'hình ảnh trên Linux
- 11. Làm thế nào bạn có thể hủy một SQL quá trình thực hiện chủ lập trình
- 12. Loại bỏ "bộ đệm có quá trình chạy" xác nhận khi quá trình này là một quá trình bay thực hiện
- 13. Lỗi nghiêm trọng: Thời gian thực hiện tối đa 0 giây vượt quá
- 14. Phát hiện số quá trình đang chạy với cùng tên
- 15. Làm cách nào để đồng bộ hóa quá trình thực hiện quy trình Phụ huynh/Con?
- 16. bash: lưu trong một biến số giây mà một quá trình đã thực hiện để chạy
- 17. Chương trình C++ để thực hiện một Chương trình khác với các đối số dòng lệnh
- 18. Làm thế nào để chờ quá trình chấm dứt thực hiện một quy trình khác trong tập tin thực thi
- 19. Làm thế nào để thực hiện một quá trình liên tục chạy trong JavaEE
- 20. Khi thực hiện một Process.Start() bạn có cần bọc nó trong quá trình sử dụng không?
- 21. Lỗi: "quá trình 0 0" không tìm thấy Symbol File trong WinDbg
- 22. Thực hiện một Storyboard Segue lập trình
- 23. Làm thế nào để giám sát quá trình thực hiện chương trình/trong cửa sổ?
- 24. Thực hiện quá tải chức năng trong Haskell
- 25. Là argv [argc] bằng NULL Pointer
- 26. Giết một quá trình và chờ quá trình thoát
- 27. Xóa một mutex từ một quá trình
- 28. Trình xác thực thực hiện trong Eclipse
- 29. Sử dụng argc và argv trong Eclipse?
- 30. cách thực hiện {} trong khi (0) hoạt động trong macro?
chính xác bạn đang cố gắng đạt được điều gì?Ý tôi là, có thể có một cách khác, đơn giản hơn để làm điều đó. – Aziz
Hệ điều hành của bạn là gì và bạn đang thực hiện quy trình này như thế nào? Có phải người dùng đã kích hoạt hoặc bạn đang gọi từ một quy trình khác không? – ibid
Bạn không thể đặt 'argc = 0' làm dòng đầu tiên của' main() '? –