Memory between argv and top stack x86_64












0















Reading some articles on the memory layout of a program in memory, 3GiB-1 is the top of the stack in x86_32 and contains a NULL dword, preceded by the program name, preceded by env and argv.



This means (or should mean) I can reference 0xbfffffff - 4, - 5, ... and get the program name and so on.



Compiling even the following code for x86_64, it gets SIGSEGVd.



unsigned long *stack_top = (unsigned long*)0x7ffffffffff;

char *pname = (char *)(stack_top) - sizeof(void*);
printf("%cn", *pname);


And argv is at 0x7fff3e53cc18. Why?










share|improve this question

























  • You're not telling what system you're using. If that's Linux, you can get the actual layout of the virtual memory of a process from /proc/PID/maps, and the address where argv0, env, etc from /proc/PID/stat. /proc/self/ gets you the current process. See the 2nd part here. Please edit the system details and your actual problem into your question.

    – mosvy
    6 hours ago


















0















Reading some articles on the memory layout of a program in memory, 3GiB-1 is the top of the stack in x86_32 and contains a NULL dword, preceded by the program name, preceded by env and argv.



This means (or should mean) I can reference 0xbfffffff - 4, - 5, ... and get the program name and so on.



Compiling even the following code for x86_64, it gets SIGSEGVd.



unsigned long *stack_top = (unsigned long*)0x7ffffffffff;

char *pname = (char *)(stack_top) - sizeof(void*);
printf("%cn", *pname);


And argv is at 0x7fff3e53cc18. Why?










share|improve this question

























  • You're not telling what system you're using. If that's Linux, you can get the actual layout of the virtual memory of a process from /proc/PID/maps, and the address where argv0, env, etc from /proc/PID/stat. /proc/self/ gets you the current process. See the 2nd part here. Please edit the system details and your actual problem into your question.

    – mosvy
    6 hours ago
















0












0








0


1






Reading some articles on the memory layout of a program in memory, 3GiB-1 is the top of the stack in x86_32 and contains a NULL dword, preceded by the program name, preceded by env and argv.



This means (or should mean) I can reference 0xbfffffff - 4, - 5, ... and get the program name and so on.



Compiling even the following code for x86_64, it gets SIGSEGVd.



unsigned long *stack_top = (unsigned long*)0x7ffffffffff;

char *pname = (char *)(stack_top) - sizeof(void*);
printf("%cn", *pname);


And argv is at 0x7fff3e53cc18. Why?










share|improve this question
















Reading some articles on the memory layout of a program in memory, 3GiB-1 is the top of the stack in x86_32 and contains a NULL dword, preceded by the program name, preceded by env and argv.



This means (or should mean) I can reference 0xbfffffff - 4, - 5, ... and get the program name and so on.



Compiling even the following code for x86_64, it gets SIGSEGVd.



unsigned long *stack_top = (unsigned long*)0x7ffffffffff;

char *pname = (char *)(stack_top) - sizeof(void*);
printf("%cn", *pname);


And argv is at 0x7fff3e53cc18. Why?







virtual-memory stack






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 9 hours ago









ctrl-alt-delor

11.9k42260




11.9k42260










asked 10 hours ago









norakenorake

133




133













  • You're not telling what system you're using. If that's Linux, you can get the actual layout of the virtual memory of a process from /proc/PID/maps, and the address where argv0, env, etc from /proc/PID/stat. /proc/self/ gets you the current process. See the 2nd part here. Please edit the system details and your actual problem into your question.

    – mosvy
    6 hours ago





















  • You're not telling what system you're using. If that's Linux, you can get the actual layout of the virtual memory of a process from /proc/PID/maps, and the address where argv0, env, etc from /proc/PID/stat. /proc/self/ gets you the current process. See the 2nd part here. Please edit the system details and your actual problem into your question.

    – mosvy
    6 hours ago



















You're not telling what system you're using. If that's Linux, you can get the actual layout of the virtual memory of a process from /proc/PID/maps, and the address where argv0, env, etc from /proc/PID/stat. /proc/self/ gets you the current process. See the 2nd part here. Please edit the system details and your actual problem into your question.

– mosvy
6 hours ago







You're not telling what system you're using. If that's Linux, you can get the actual layout of the virtual memory of a process from /proc/PID/maps, and the address where argv0, env, etc from /proc/PID/stat. /proc/self/ gets you the current process. See the 2nd part here. Please edit the system details and your actual problem into your question.

– mosvy
6 hours ago












0






active

oldest

votes











Your Answer








StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f505344%2fmemory-between-argv-and-top-stack-x86-64%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Unix & Linux Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f505344%2fmemory-between-argv-and-top-stack-x86-64%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Loup dans la culture

How to solve the problem of ntp “Unable to contact time server” from KDE?

ASUS Zenbook UX433/UX333 — Configure Touchpad-embedded numpad on Linux