libc
是一個與特定操作系統,處理器以及經常使用的編譯器緊密相關的庫。因此,在libc
來源中看到一些相當不可思議的東西並不罕見。
在這種情況下,ubp_av
是無界指向argv
的指針。 GCC提供了控制指針上某些邊界檢查操作的(未詳細記錄的)__bounded
和__unbounded
類型註釋。大概因爲argv
是由OS提供的,它被認爲是無界的(即可能指向基本上任何長度的存儲器),並且可能由於libc
編碼標準,它需要被標記爲這樣。
下面是GNU C庫的特定版本稍有不同的函數簽名:
int
/* GKM FIXME: GCC: this should get __BP_ prefix by virtue of the
BPs in the arglist of startup_info.main and startup_info.init. */
BP_SYM (__libc_start_main) (int argc, char *__unbounded *__unbounded ubp_av,
char *__unbounded *__unbounded ubp_ev,
ElfW (auxv_t) * __unbounded auxvec,
void (*rtld_fini) (void),
struct startup_info *__unbounded stinfo,
char *__unbounded *__unbounded stack_on_entry)
{
#if __BOUNDED_POINTERS__
char **argv;
#else
# define argv ubp_av
#endif
...
,從中可以清楚地看到,ubp_av
意思是「無界指針ARGV」。
Thee links幫助我更好理解你的答案;我加入以幫助他人:[鏈接](http://en.wikipedia.org/wiki/Bounded_pointer),[鏈接](https://gcc.gnu.org/projects/bp/main.html ),[鏈接](https://www.sourceware.org/ml/glibc-linux/2000-q2/msg00145.html)該gcc項目似乎被放棄。 – user2431763