>getpid() = 9271
>brk(0) = 0x804b160
>brk(0x804b198) = 0x804b198
>brk(0x804c000) = 0x804c000
>open(“/usr/share/locale/locale.alias”, O_RDONLY) = 4
>fstat64(0x4, 0xbfffb79c) = -1 ENOSYS (Function not
>implemented)
>fstat(4, {st_mode=S_IFREG|0644, st_size=2265, ...}) = 0
>old_mmap(NULL, 4096, PROT_READ|PROT_WRITE,
>MAP_PRIVATE|MAP_ANONYMOUS, – 1, 0) = 0x40015000
>read(4, “# Locale name alias data base.\n#”..., 4096) = 2265
>read(4, “”, 4096) = 0
>close(4) = 0
>munmap(0x40015000, 4096) = 0
Если в программе встречается вызов функции setlocale, то libc читает локализованную информацию (информацию о местной специфике) для определения формата отображения чисел, даты, времени и т. д. Напомним, что хотя стандартные разрешения не позволяют модифицировать файлы локализации непривилегированным пользователям, но их достаточно для чтения этих файлов. Добавим, что разрешения файлов обычно печатаются при выводе информации о каждом вызове fstat (например, в приведенном примере 0644). Это позволяет легко визуально отследить неверные разрешения. Если ищется файл локализации, в который предполагается записать информацию, будьте осторожны, чтобы при записи не получить ошибки переполнения буфера. Третий (косвенный) параметр в списке входных параметров – файлы локализации.
>open(“/usr/share/i18n/locale.alias”, O_RDONLY) = -1 ENOENT
>(No such file or directory)
>open(“/usr/share/locale/en_US/LC_MESSAGES”, O_RDONLY) = 4
>fstat(4, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
>close(4) = 0
>open(“/usr/share/locale/en_US/LC_MESSAGES/SYS_LC_MESSAGES”,
>O_RDONLY) = 4
>fstat(4, {st_mode=S_IFREG|0644, st_size=44, ...}) = 0
>old_mmap(NULL, 44, PROT_READ, MAP_PRIVATE, 4, 0)
>= 0x40015000
>close(4) = 0
>open(“/usr/share/locale/en_US/LC_MONETARY”, O_RDONLY) = 4
>fstat(4, {st_mode=S_IFREG|0644, st_size=93, ...}) = 0
>old_mmap(NULL, 93, PROT_READ, MAP_PRIVATE, 4, 0)
>= 0x40016000
>close(4) = 0
>open(“/usr/share/locale/en_US/LC_COLLATE”, O_RDONLY) = 4
>fstat(4, {st_mode=S_IFREG|0644, st_size=29970, ...}) = 0
>old_mmap(NULL, 29970, PROT_READ, MAP_PRIVATE, 4, 0)
>= 0x4010e000
>close(4) = 0
>brk(0x804d000) = 0x804d000
>open(“/usr/share/locale/en_US/LC_TIME”, O_RDONLY) = 4
>fstat(4, {st_mode=S_IFREG|0644, st_size=508, ...}) = 0
>old_mmap(NULL, 508, PROT_READ, MAP_PRIVATE, 4, 0)
>= 0x40017000
>close(4) = 0
>open(“/usr/share/locale/en_US/LC_NUMERIC”, O_RDONLY) = 4