Bạn cũng có thể thực hiện điều này theo lập trình từ nguồn C trước UNIX exec
.
Nếu bạn có một cái nhìn tại nguồn cho setarch (đây là một nguồn):
http://code.metager.de/source/xref/linux/utils/util-linux/sys-utils/setarch.c
Bạn có thể thấy nếu nắm để một cuộc gọi hệ thống (syscall
) hoặc một cuộc gọi chức năng (tùy thuộc vào những gì hệ thống của bạn xác định). Từ setarch.c:
#ifndef HAVE_PERSONALITY
# include <syscall.h>
# define personality(pers) ((long)syscall(SYS_personality, pers))
#endif
Trên hệ thống CentOS 6 64 bit của tôi, có vẻ như nó sử dụng hàm (có thể gọi là syscall cùng một ở trên). Hãy xem đoạn này từ tập tin bao gồm trong /usr/include/sys/personality.h
(như tham chiếu như <sys/personality.h>
trong mã nguồn setarch):
/* Set different ABIs (personalities). */
extern int personality (unsigned long int __persona) __THROW;
gì nó boils xuống, là bạn có thể, từ mã C, gọi và thiết lập tính cách để sử dụng ADDR_NO_RANDOMIZE và sau đó exec
(giống như setarch
hiện).
#include <sys/personality.com>
#ifndef HAVE_PERSONALITY
# include <syscall.h>
# define personality(pers) ((long)syscall(SYS_personality, pers))
#endif
...
void mycode()
{
// If requested, turn off the address rand feature right before execing
if (MyGlobalVar_Turn_Address_Randomization_Off) {
personality(ADDR_NO_RANDOMIZE);
}
execvp(argv[0], argv); // ... from set-arch.
}
Rõ ràng là bạn không thể tắt ngẫu nhiên địa chỉ trong quá trình bạn đang ở (grin: trừ khi có thể tải động), vì vậy điều này chỉ ảnh hưởng đến nhánh và người quản lý sau này. Tôi tin rằng cờ Địa chỉ ngẫu nhiên được thừa hưởng bởi các tiến trình con con?
Dù sao, đó là cách bạn có thể tắt tính năng ngẫu nhiên địa chỉ theo chương trình trong mã nguồn C. Đây có thể là giải pháp duy nhất của bạn nếu bạn không muốn lực lượng người dùng can thiệp thủ công và bắt đầu với setarch hoặc một trong các giải pháp khác được liệt kê trước đó.
Trước khi bạn khiếu nại về các vấn đề bảo mật khi tắt tính năng này, một số thư viện/công cụ bộ nhớ dùng chung (chẳng hạn như PickingTools shared memory và một số IBM databases) cần phải tắt tính năng ngẫu nhiên địa chỉ bộ nhớ.
Hệ điều hành nào? ...... – Orbit
liên quan http://stackoverflow.com/questions/11238457/disable-and-re-enable-address-space-layout-randomization-only-for-myself –