0
最近我正在學習一些關於ret2libc利用的實驗,我發現我們可以使用環境變量來存儲有效負載,並且下面的代碼getenv.c
可以幫助我們獲得位置環境變量:獲取環境變量的位置當試圖ret2libc利用
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main(int argc, char *argv[]) {
char *ptr;
if(argc < 3) {
printf("Usage: %s <environment var> <target program>\n", argv[0]);
exit(0);
}
ptr = getenv(argv[1]); /* Get env var location. */
ptr += (strlen(argv[0]) - strlen(argv[2])); /* Adjust for program name. */
printf("%s will be at %p\n", argv[1], ptr);
}
,我們可以使用該程序是這樣的:
$ ~/getenv FAV ./program FAV will be at 0xbfffff22
這讓我很困惑的是,ptr
值不使用雙直接,但做的(strlen(argv[0]) - strlen(argv[2]))
;爲什麼?