Int test(){
char buff[10]
printf("Enter text: ");
gets(buff);
puts(buff);
}
我ä¸çŸ¥é“如何说出这个问题,但我试图ç†è§£å¦‚何将值å˜å‚¨åœ¨å †æ ˆå¸§ä¸Šä¸ºå±€éƒ¨å˜é‡åˆ†é…的缓冲区ä¸ã€‚
---------------
Return Address
---------------
old ebp
---------------
local variables
---------------
æ¯ä¸ªå—是4个å—节还是4个1å—节?
------------------
00 | 40 | 06 | 06
------------------
ff | ff | de | 70
------------------
通过gdb,我看到为测试分é…的缓冲区是0x10
我输入sssssssss
:
x/x $rbp = 0xffffde70
x/x $rbp + 8 = 0x00400606
x/s $rbp - 16 = "sssssssss"
x/s $rbp - 8 = "\ns"
x/s $rbp - 4 = ""
那么我输入的å—符(åå…进制)是如何å˜å‚¨çš„?喜欢æ¯ä¸ªè¡—区有多少。这是一个64系统。
-----------------
00 | 40 | 06 | 06
------------------
ff | ff | de | 70
------------------
| | |
------------------
| | | s
------------------
s | s | s | s
------------------
s | s | s | s
------------------
ç”案 0 :(得分:2)
ä»Žä¸¥æ ¼çš„C角度æ¥çœ‹ï¼Œæˆ‘们ä¸çŸ¥é“。
æ ‡å‡†æ²¡æœ‰å…·ä½“è¯´æ˜Žã€‚è¯¥æ ‡å‡†ç”šè‡³æ²¡æœ‰æåˆ°å †æ ˆçš„æ¦‚å¿µã€‚ä»Žæ ‡å‡†çš„è§’åº¦æ¥çœ‹ï¼Œä»£ç 是在抽象机器上执行的(å³æ²¡æœ‰æ述机器是如何åšåˆ°çš„。åªæœ‰æœºå™¨å¿…é¡»åšçš„事情。)
所以它是如何完æˆå–决于具体的实现,它(å¯èƒ½ï¼‰å› 系统而异。
您需è¦æ‰¾åˆ°æ‚¨æ£åœ¨ä½¿ç”¨çš„系统的ABI文档。 ABI文档将æ述如何在您的系统上完æˆå®ƒã€‚
请å‚阅en.wikipedia.org/wiki/Application_binary_interface
也许阅读Where is the x86-64 System V ABI documented?