{"rsdb":{"rid":"301783","subhead":"","postdate":"0","aid":"217028","fid":"54","uid":"1","topic":"1","content":"

\u52a8\u6001\u94fe\u63a5\u7684\u786e\u6709\u5f88\u591a\u4f18\u52bf,\u6bd4\u9759\u6001\u94fe\u63a5\u8981\u7075\u6d3b\u5f97\u591a,\u4f46\u5b83\u662f\u4ee5\u727a\u7272\u4e00\u90e8\u5206\u6027\u80fd\u4e3a\u4ee3\u4ef7\u7684\u3002\u636e\u7edf\u8ba1ELF\u7a0b\u5e8f\u5728\u9759\u6001\u94fe\u63a5\u4e0b\u8981\u6bd4\u52a8\u6001\u5e93\u7a0d\u5fae\u5feb\u70b9,\u5927\u7ea6\u4e3a1%~5%,\u5f53\u7136\u8fd9\u53d6\u51b3\u4e8e\u7a0b\u5e8f\u672c\u8eab\u7684\u7279\u6027\u53ca\u8fd0\u884c\u73af\u5883\u7b49\u3002\u6211\u4eec\u77e5\u9053\u52a8\u6001\u94fe\u63a5\u6bd4\u9759\u6001\u94fe\u63a5\u6162\u7684\u4e3b\u8981\u539f\u56e0\u662f\u52a8\u6001\u94fe\u63a5\u4e0b\u5bf9\u4e8e\u5168\u5c40\u548c\u9759\u6001\u7684\u6570\u636e\u8bbf\u95ee\u90fd\u8981\u8fdb\u884c\u590d\u6742\u7684GOT\u5b9a\u4f4d,\u7136\u540e\u95f4\u63a5\u5bfb\u5740;\u5bf9\u4e8e\u6a21\u5757\u95f4\u7684\u8c03\u7528\u4e5f\u8981\u5148\u5b9a\u4f4dGOT,\u7136\u540e\u518d\u8fdb\u884c\u95f4\u63a5\u8df3\u8f6c,\u5982\u6b64\u4e00\u6765,\u7a0b\u5e8f\u7684\u8fd0\u884c\u901f\u5ea6\u5fc5\u5b9a\u4f1a\u51cf\u6162\u3002\u53e6\u5916\u4e00\u4e2a\u51cf\u6162\u8fd0\u884c\u901f\u5ea6\u7684\u539f\u56e0\u662f\u52a8\u6001\u94fe\u63a5\u7684\u94fe\u63a5\u5de5\u4f5c\u5728\u8fd0\u884c\u65f6\u5b8c\u6210,\u5373\u7a0b\u5e8f\u5f00\u59cb\u6267\u884c\u65f6,\u52a8\u6001\u94fe\u63a5\u5668\u90fd\u8981\u8fdb\u884c\u4e00\u6b21\u94fe\u63a5\u5de5\u4f5c,\u6b63\u5982\u6211\u4eec\u4e0a\u9762\u63d0\u5230\u7684,\u52a8\u6001\u94fe\u63a5\u5668\u4f1a\u5bfb\u627e\u5e76\u88c5\u8f7d\u6240\u9700\u8981\u7684\u5171\u4eab\u5bf9\u8c61,\u7136\u540e\u8fdb\u884c\u7b26\u53f7\u67fb\u627e\u5730\u5740\u91cd\u5b9a\u4f4d\u7b49\u5de5\u4f5c,\u8fd9\u4e9b\u5de5\u4f5c\u52bf\u5fc5\u51cf\u6162\u7a0b\u5e8f\u7684\u542f\u52a8\u901f\u5ea6\u3002\u8fd9\u662f\u5f71\u54cd\u52a8\u6001\u94fe\u63a5\u6027\u80fd\u7684\u4e24\u4e2a\u4e3b\u8981\u95ee\u9898,\u6211\u4eec\u5c06\u5728\u8fd9\u4e00\u8282\u4ecb\u7ecd\u4f18\u5316\u52a8\u6001\u94fe\u63a5\u6027\u80fd\u7684\u4e00\u4e9b\u65b9\u6cd5\u3002<\/p>

\u5728\u52a8\u6001\u94fe\u63a5\u4e0b,\u7a0b\u5e8f\u6a21\u5757\u4e4b\u95f4\u5305\u542b\u4e86\u5927\u91cf\u7684\u51fd\u6570\u5f15\u7528(\u5168\u5c40\u53d8\u91cf\u5f80\u5f80\u6bd4\u8f83\u5c11,\u56e0\u4e3a\u5927\u91cf\u7684\u5168\u5c40\u53d8\u91cf\u4f1a\u5bfc\u81f4\u6a21\u5757\u4e4b\u95f4\u8026\u5408\u5ea6\u53d8\u5927),\u6240\u4ee5\u5728\u7a0b\u5e8f\u5f00\u59cb\u6267\u884c\u524d,\u52a8\u6001\u94fe\u63a5\u4f1a\u8017\u8d39\u4e0d\u5c11\u65f6\u95f4\u7528\u4e8e\u89e3\u51b3\u6a21\u5757\u4e4b\u95f4\u7684\u51fd\u6570\u5f15\u7528\u7684\u7b26\u53f7\u67e5\u627e\u4ee5\u53ca\u91cd\u5b9a\u4f4d,\u8fd9\u4e5f\u662f\u6211\u4eec\u4e0a\u9762\u63d0\u5230\u7684\u51cf\u6162\u52a8\u6001\u94fe\u63a5\u6027\u80fd\u7684\u7b2c\u4e8c\u4e2a\u539f\u56e0\u3002\u4e0d\u8fc7\u53ef\u4ee5\u60f3\u8c61,\u5728\u4e00\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d,\u53ef\u80fd\u5f88\u591a\u51fd\u6570\u5728\u7a0b\u5e8f\u6267\u884c\u5b8c\u65f6\u90fd\u4e0d\u4f1a\u88ab\u7528\u5230,\u6bd4\u5982\u4e00\u4e9b\u9519\u8bef\u5904\u7406\u51fd\u6570\u6216\u8005\u662f\u4e00\u4e9b\u7528\u6237\u5f88\u5c11\u7528\u5230\u7684\u529f\u80fd\u6a21\u5757\u7b49,\u5982\u679c\u4e00\u5f00\u59cb\u5c31\u628a\u6240\u6709\u51fd\u6570\u90fd\u94fe\u63a5\u597d\u5b9e\u9645\u4e0a\u662f\u4e00\u79cd\u6d6a\u8d39\u3002\u6240\u4ee5ELF\u91c7\u7528\u4e86\u4e00\u79cd\u53eb\u505a\u5ef6\u8fdf\u7ed1\u5b9a(Lazy Binding)\u7684\u505a\u6cd5,\u57fa\u672c\u7684\u601d\u60f3\u5c31\u662f\u5f53\u51fd\u6570\u7b2c\u4e00\u6b21\u88ab\u7528\u5230\u65f6\u624d\u8fdb\u884c\u7ed1\u5b9a(\u7b26\u53f7\u67fb\u627e\u3001\u91cd\u5b9a\u4f4d\u7b49),\u5982\u679c\u6ca1\u6709\u7528\u5230\u5219\u4e0d\u8fdb\u884c\u7ed1\u5b9a\u3002\u6240\u4ee5\u7a0b\u5e8f\u5f00\u59cb\u6267\u884c\u65f6,\u6a21\u5757\u95f4\u7684\u51fd\u6570\u8c03\u7528\u90fd\u6ca1\u6709\u8fdb\u884c\u7ed1\u5b9a,\u800c\u662f\u9700\u8981\u7528\u5230\u65f6\u624d\u7531\u52a8\u6001\u94fe\u63a5\u5668\u6765\u8d1f\u8d23\u7ed1\u5b9a\u3002\u8fd9\u6837\u7684\u505a\u6cd5\u53ef\u4ee5\u5927\u5927\u52a0\u5feb\u7a0b\u5e8f\u7684\u542f\u52a8\u901f\u5ea6,\u7279\u522b\u6709\u5229\u4e8e\u4e00\u4e9b\u6709\u5927\u91cf\u51fd\u6570\u5f15\u7528\u548c\u5927\u91cf\u6a21\u5757\u7684\u7a0b\u5e8f\u3002<\/p>

ELF\u4f7f\u7528PLT( Procedure Linkage Table)\u7684\u65b9\u6cd5\u6765\u5b9e\u73b0,\u8fd9\u79cd\u65b9\u6cd5\u4f7f\u7528\u4e86\u4e00\u4e9b\u5f88\u7cbe\u5de7\u7684\u6307\u4ee4\u5e8f\u5217\u6765\u5b8c\u6210\u3002\u5728\u5f00\u59cb\u8be6\u7ec6\u4ecb\u7ecdPLT\u4e4b\u524d,\u6211\u4eec\u5148\u4ece\u52a8\u6001\u94fe\u63a5\u5668\u7684\u89d2\u5ea6\u8bbe\u60f3\u4e00\u4e0b\uff1a\u5047\u8bbe liba.so\u9700\u8981\u8c03\u7528ibc.so\u4e2d\u7684bar(\u51fd\u6570,\u90a3\u4e48\u5f53 liba. so\u4e2d\u7b2c\u4e00\u6b21\u8c03\u7528bar()\u65f6,\u8fd9\u65f6\u5019\u5c31\u9700\u8981\u8c03\u7528\u52a8\u6001\u94fe\u63a5\u5668\u4e2d\u7684\u67d0\u4e2a\u51fd\u6570\u6765\u5b8c\u6210\u5730\u5740\u7ed1\u5b9a\u5de5\u4f5c,\u6211\u4eec\u5047\u8bbe\u8fd9\u4e2a\u51fd\u6570\u53eb\u505a lookup(),\u90a3\u4e48 lookup)\u9700\u8981\u77e5\u9053\u54ea\u4e9b\u5fc5\u8981\u7684\u4fe1\u606f\u624d\u80fd\u5b8c\u6210\u8fd9\u4e2a\u51fd\u6570\u5730\u5740\u7ed1\u5b9a\u5de5\u4f5c\u5462?\u6211\u60f3\u7b54\u6848\u5f88\u660e\u663e, lookup\u81f3\u5c11\u9700\u8981\u77e5\u9053\u8fd9\u4e2a\u5730\u5740\u7ed1\u5b9a\u53d1\u751f\u5728\u54ea\u4e2a\u6a21\u5757,\u54ea\u4e2a\u51fd\u6570?\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u5047\u8bbelookup\u7684\u539f\u578b\u4e3a lookup( module, function),\u8fd9\u4e24\u4e2a\u53c2\u6570\u7684\u503c\u5728\u6211\u4eec\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\u5206\u522b\u4e3a liba.so\u548cbar()\u3002\u5728Glbc\u4e2d,\u6211\u4eec\u8fd9\u91cc\u7684 lookup\u51fd\u6570\u771f\u6b63\u7684\u540d\u5b57\u53eb _dl_ runtime_resolve()\u3002<\/p>

\u5f53\u6211\u4eec\u8c03\u7528\u67d0\u4e2a\u5916\u90e8\u6a21\u5757\u7684\u51fd\u6570\u65f6\uff0c\u5982\u679c\u6309\u7167\u901a\u5e38\u7684\u505a\u6cd5\u5e94\u8be5\u662f\u901a\u8fc7GOT\u4e2d\u76f8\u5e94\u7684\u9879\u8fdb\u884c\u95f4\u63a5\u8df3\u8f6c\u3002PLT\u4e3a\u4e86\u5b9e\u73b0\u5ef6\u8fdf\u7ed1\u5b9a\uff0c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u95f4\u53c8\u589e\u52a0\u4e86\u4e00\u5c42\u95f4\u63a5\u8df3\u8f6c\u3002\u8c03\u7528\u51fd\u6570\u5e76\u4e0d\u76f4\u63a5\u901a\u8fc7GOT\u8df3\u8f6c\uff0c\u800c\u662f\u901a\u8fc7\u4e00\u4e2a\u53eb\u505aPLT\u9879\u7684\u7ed3\u6784\u6765\u8fdb\u884c\u8df3\u8f6c\u3002\u6bcf\u4e2a\u5916\u90e8\u51fd\u6570\u5728PLT\u4e2d\u90fd\u6709\u4e00\u4e2a\u76f8\u5e94\u7684\u9879\uff0c\u6bd4\u5982bar()\u51fd\u6570\u5728PLT\u4e2d\u7684\u9879\u7684\u5730\u5740\u6211\u4eec\u79f0\u4e4b\u4e3abar@plt\u3002\u8ba9\u6211\u4eec\u6765\u770b\u770bbar@plt\u7684\u5b9e\u73b0<\/p>

\"\"<\/p>

bar@plt\u7684\u7b2c\u4e00\u6761\u6307\u4ee4\u662f\u4e00\u6761\u901a\u8fc7GOT\u95f4\u63a5\u8df3\u8f6c\u7684\u6307\u4ee4\u3002bar@GOT\u8868\u793aGOT\u4e2d\u4fdd\u5b58bar()\u8fd9\u4e2a\u51fd\u6570\u76f8\u5e94\u7684\u9879\u3002\u5982\u679c\u94fe\u63a5\u5668\u5728\u521d\u59cb\u5316\u9636\u6bb5\u5df2\u7ecf\u521d\u59cb\u5316\u8be5\u9879,\u5e76\u4e14\u5c06bar()\u7684\u5730\u5740\u586b\u5165\u8be5\u9879,\u90a3\u4e48\u8fd9\u4e2a\u8df3\u8f6c\u6307\u4ee4\u7684\u7ed3\u679c\u5c31\u662f\u6211\u4eec\u6240\u671f\u671b\u7684,\u8df3\u8f6c\u5230bar(0,\u5b9e\u73b0\u51fd\u6570\u6b63\u786e\u8c03\u7528\u4f46\u662f\u4e3a\u4e86\u5b9e\u73b0\u5ef6\u8fdf\u7ed1\u5b9a,\u94fe\u63a5\u5668\u5728\u521d\u59cb\u5316\u9636\u6bb5\u5e76\u6ca1\u6709\u5c06bar()\u7684\u5730\u5740\u586b\u5165\u5230\u8be5\u9879,\u800c\u662f\u5c06\u4e0a\u9762\u4ee3\u7801\u4e2d\u7b2c\u4e8c\u6761\u6307\u4ee4\u201c push n\u201d\u7684\u5730\u5740\u586b\u5165\u5230bar@GOT\u4e2d,\u8fd9\u4e2a\u6b65\u9aa4\u4e0d\u9700\u8981\u67e5\u627e\u4efb\u4f55\u7b26\u53f7,\u6240\u4ee5\u4ee3\u4ef7\u5f88\u4f4e\u3002\u5f88\u660e\u663e,\u7b2c\u6761\u6307\u4ee4\u7684\u6548\u679c\u662f\u8df3\u8f6c\u5230\u7b2c\u4e8c\u6761\u6307\u4ee4,\u76f8\u5f53\u4e8e\u6ca1\u6709\u8fdb\u884c\u4efb\u4f55\u64cd\u4f5c\u3002\u7b2c\u4e8c\u6761\u6307\u4ee4\u5c06\u4e00\u4e2a\u6570\u5b57n\u538b\u5165\u5806\u6808\u4e2d,\u8fd9\u4e2a\u6570\u5b57\u662fbar\u8fd9\u4e2a\u7b26\u53f7\u5f15\u7528\u5728\u91cd\u5b9a\u4f4d\u8868\u201c rel. plt\u201d\u4e2d\u7684\u4e0b\u6807\u63a5\u7740\u53c8\u662f\u4e00\u6761push\u6307\u4ee4\u5c06\u6a21\u5757\u7684D\u538b\u5165\u5230\u5806\u6808,\u7136\u540e\u8df3\u8f6c\u5230dl_ runtime resolve\u8fd9\u5b9e\u9645\u4e0a\u5c31\u662f\u5728\u5b9e\u73b0\u6211\u4eec\u524d\u4ea9\u63d0\u5230\u7684 lookup( module, function)\u8fd9\u4e2a\u51fd\u6570\u7684\u8c03\u7528:\u5148\u5c06\u6240\u9700\u8981\u51b3\u8bae\u7b26\u53f7\u7684\u4e0b\u6807\u538b\u5165\u5806\u6808,\u518d\u5c06\u6a21\u5757ID\u538b\u5165\u5806\u6808,\u7136\u540e\u8c03\u7528\u52a8\u6001\u94fe\u63a5\u5668\u7684d_ runtime_ resolve()\u51fd\u6570\u6765\u5b8c\u6210\u7b26\u53f7\u89e3\u6790\u548c\u91cd\u5b9a\u4f4d\u4f5c\u3002 dl_runtime_resolve\u5728\u8fdb\u884c\u4e00\u7cfb\u5217\u5de5\u4f5c\u4ee5\u540e\u5c06bar(\u7684\u771f\u6b63\u5730\u5740\u586b\u5165\u5230bar@GOT\u4e2d<\/p>

\u4e00\u65e6bar()\u8fd9\u4e2a\u51fd\u6570\u88ab\u89e3\u6790\u5b8c\u6210\uff0c\u5f53\u6211\u4eec\u518d\u6b21\u8c03\u7528bar@plt\u65f6\uff0c\u7b2c\u4e00\u6761jmp\u6307\u4ee4\u5c31\u80fd\u591f\u8df3\u8f6c\u5230\u771f\u6b63\u7684bar()\u51fd\u6570\u4e2d\uff0cbar()\u51fd\u6570\u8fd4\u56de\u7684\u65f6\u5019\u4f1a\u6839\u636e\u5806\u6808\u91cc\u9762\u4fdd\u5b58\u7684EIP\u76f4\u63a5\u8fd4\u56de\u8c03\u7528\u8005\uff0c\u800c\u4e0d\u4f1a\u518d\u7ee7\u7eed\u6267\u884cbar()plt\u4e2d\u7b2c\u4e8c\u6761\u6307\u4ee4\u7684\u5f00\u59cb\u7684\u90a3\u6bb5\u4ee3\u7801\uff0c\u90a3\u6bb5\u4ee3\u7801\u6307\u6325\u5728\u7b26\u53f7\u672a\u88ab\u89e3\u6790\u7684\u65f6\u5019\u6267\u884c\u4e00\u6b21\uff1b<\/p>

\u4e0a\u9762\u63cf\u8ff0\u7684\u662fPLT\u7684\u57fa\u672c\u539f\u7406\uff0cPLT\u7684\u771f\u6b63\u5b9e\u73b0\u8981\u6bd4\u5b83\u7684\u7ed3\u6784\u590d\u6742\u4e00\u4e9b\uff0cELF\u5c06GOT\u62c6\u5206\u6210\u4e24\u4e2a\u8868".got"\u548c"".got.plt"\u3002\u5176\u4e2d"".got"\u7528\u6765\u4fdd\u5b58\u5168\u5c40\u53d8\u91cf\u7684\u5f15\u7528\u5730\u5740\u3002".got.plt"\u7528\u6765\u4fdd\u5b58\u51fd\u6570\u5f15\u7528\u7684\u5730\u5740\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u6240\u6709\u5bf9\u4e8e\u5916\u90e8\u51fd\u6570\u7684\u5f15\u7528\u5168\u90e8\u88ab\u5206\u79bb\u51fa\u6765\u653e\u5230\u4e86 ".got.plt"\u4e2d\u3002\u53e6\u5916 ".got.plt"\u8fd8\u6709\u4e00\u4e2a\u7279\u6b8a\u7684\u5730\u65b9\u5c31\u662f\u5b83\u7684\u524d\u4e09\u9879\u662f\u6709\u7279\u6b8a\u610f\u4e49\u7684\uff0c\u5206\u522b\u542b\u4e49\u5982\u4e0b\uff1a<\/p>

\u5176\u4e2d\u7b2c\u4e8c\u9879\u548c\u7b2c\u4e09\u9879\u7531\u52a8\u6001\u94fe\u63a5\u5668\u5728\u8f6c\u8f7d\u5171\u4eab\u6a21\u5757\u7684\u65f6\u5019\u8d1f\u8d23\u5c06\u5b83\u4eec\u521d\u59cb\u5316\u3002".got.plt"\u7684\u5176\u4f59\u9879\u5206\u522b\u5bf9\u5e94\u6bcf\u4e00\u4e2a\u5916\u90e8\u51fd\u6570\u7684\u5f15\u7528\u3002PLT\u7684\u7ed3\u6784\u4e5f\u4e0e\u6211\u4eec\u793a\u4f8b\u4e2d\u7684PLT\u7a0d\u6709\u4e0d\u540c\uff0c\u4e3a\u4e86\u51cf\u5c11\u4ee3\u7801\u7684\u91cd\u590d\uff0cELF\u628a\u4e0a\u9762\u7684\u4f8b\u5b50\u4e2d\u7684\u6700\u540e\u4e24\u6761\u6307\u4ee4\u653e\u5728PLT\u4e2d\u7684\u7b2c\u4e00\u9879\uff0c\u5e76\u4e14\u89c4\u5b9a\u6bcf\u4e00\u9879\u662f16\u4e2a\u5b57\u8282\uff0c\u521a\u597d\u7528\u6765\u5b58\u653e3\u6761\u6307\u4ee4\uff0c\u5b9e\u9645\u4e0a\u7684PLT\u7684\u57fa\u672c\u7ed3\u6784\u5982\u56fe\u6240\u793a\uff1a<\/p>

\"\"<\/p>

\u5b9e\u9645\u4e0a\u7684PLT\u7ed3\u6784\u5982\u4e0b\uff1a<\/p>

PLT\u5728ELF\u6587\u4ef6\u4e2d\u4ee5\u72ec\u7acb\u4ee3\u7801\u7684\u6bb5\u5b58\u653e\uff0c\u6bb5\u540d\u901a\u5e38\u79f0\u4e3a ".plt"\uff0c\u56e0\u4e3a\u5b83\u672c\u8eab\u5c31\u662f\u4e00\u4e9b\u5730\u5740\u65e0\u5173\u7684\u4ee3\u7801\uff0c\u6240\u4ee5\u53ef\u4ee5\u8ddf\u4ee3\u7801\u6bb5\u4e00\u8d77\u5408\u5e76\u6210\u540c\u4e00\u4e2a\u53ef\u8bfb\u53ef\u6267\u884c\u7684""Segment"\u88ab\u88c5\u8f7d\u5230\u5185\u5b58\u4e2d<\/p>","orderid":"0","title":"Linux\u52a8\u6001\u94fe\u63a5\u8fc7\u7a0b\u5ef6\u8fdf\u7ed1\u5b9a\u7684\u5b9e\u73b0","smalltitle":"","mid":"0","fname":"linux\u7f16\u7a0b\u57fa\u7840","special_id":"0","bak_id":"0","info":"0","hits":"125","pages":"1","comments":"0","posttime":"2019-04-02 22:08:49","list":"1554214129","username":"admin","author":"","copyfrom":"","copyfromurl":"","titlecolor":"","fonttype":"0","titleicon":"0","picurl":"https:\/\/www.cppentry.com\/upload_files\/","ispic":"0","yz":"1","yzer":"","yztime":"0","levels":"0","levelstime":"0","keywords":"Linux<\/A> \u52a8\u6001<\/A> \u94fe\u63a5<\/A> \u8fc7\u7a0b<\/A> \u5ef6\u8fdf<\/A> \u7ed1\u5b9a<\/A> \u5b9e\u73b0<\/A>","jumpurl":"","iframeurl":"","style":"","template":"a:3:{s:4:\"head\";s:0:\"\";s:4:\"foot\";s:0:\"\";s:8:\"bencandy\";s:0:\"\";}","target":"0","ip":"47.106.78.186","lastfid":"0","money":"0","buyuser":"","passwd":"","allowdown":"","allowview":"","editer":"","edittime":"0","begintime":"0","endtime":"0","description":"Linux\u52a8\u6001\u94fe\u63a5\u8fc7\u7a0b\u5ef6\u8fdf\u7ed1\u5b9a\u7684\u5b9e\u73b0","lastview":"1713909409","digg_num":"0","digg_time":"0","forbidcomment":"0","ifvote":"0","heart":"","htmlname":"","city_id":"0"},"page":"1"}