In 32-bit Linux, if you link with gcc, you get a regular C stack:
main's return address
argc
**argv
**envp
If you link with ld, argc is first on the stack (as you know), followed by arguments (first is program name), followed by zero, followed by environment variables.
64-bit seems to be the same. Code posted by sal55 (Thank you!) seems to be for **argv (pointer to pointer), which is not quite what we've got... but would be right for gcc-linked code.
Crude example attached is totally lacking comments, but "seems to work".
Best,
Frank