1.软件å¼ååºç¡ï¼
2.VirtualAPP源码解析-Native Hook技术
3.GCC 源码编译安装
4.linux编译头文件usr/local/includelinux编译头文件
软件å¼ååºç¡ï¼
å¦è½¯ä»¶å¼åéè¦å¤å°åºç¡ï¼
å¦ä¹ 软件å¼åéè¦å ·å¤ä¸å®çåºç¡ç¥è¯ï¼ä½å¹¶ä¸è¦æ±å¦ä¹ è å ·å¤å¾é«çææ¯æ°´å¹³ã以ä¸æ¯ä¸äºå¦ä¹ 软件å¼åçåºç¡è¦æ±ï¼
计ç®æºåºç¡ç¥è¯ï¼å¦ä¹ 软件å¼åç第ä¸æ¥æ¯è¦çæ计ç®æºåºç¡ç¥è¯ï¼å¦è®¡ç®æºç»æåçãæä½ç³»ç»ãæ°æ®ç»æåç®æ³çã
ç¼ç¨åºç¡ï¼å¦ä¹ 软件å¼åéè¦ææ¡è³å°ä¸ç§ç¼ç¨è¯è¨ï¼å¦JavaãPythonãC++çï¼ä»¥åææ¡åºæ¬çç¼ç¨æ¦å¿µåææ¯ï¼å¦é¢å对象ç¼ç¨ã软件设计模å¼ãçæ¬æ§å¶çã
æ°æ®åºç¥è¯ï¼å¦ä¹ 软件å¼åéè¦äºè§£æ°æ®åºçåºç¡ç¥è¯ï¼å¦å ³ç³»åæ°æ®åºãéå ³ç³»åæ°æ®åºãSQLè¯è¨çã
Webå¼åç¥è¯ï¼å¦æä½ æ³å¦ä¹ Webå¼åï¼é£ä¹ä½ éè¦äºè§£Webå¼åçåºæ¬æ¦å¿µï¼å¦HTMLãCSSãJavaScriptãWebæ¡æ¶çã
æ»çæ¥è¯´ï¼å¦ä¹ 软件å¼åéè¦å ·å¤ä¸å®çåºç¡ç¥è¯ï¼ä½å¹¶ä¸è¦æ±ä½ æ¥æå¾é«çææ¯æ°´å¹³ãå¦æä½ æ²¡æç¸å ³çåºç¡ç¥è¯ï¼å¯ä»¥éè¿èªå¦æåå å¹è®è¯¾ç¨æ¥ææ¡æéçæè½åç¥è¯ã
软件å¼åçåºç¡è¯¾ç¨æåªäºï¼è½¯ä»¶å¼åçåºç¡è¯¾ç¨æåªäº?å大éé¸ä¸»è¦è¯¾ç¨æ¯ACCP7.0软件工ç¨å¸è¯¾ç¨ã
é¦å ï¼æ们å ä»çºµåä¸æ¥çæ´ä¸ªACCP7.0çå 容å®æï¼ACCP6.0课ç¨å å«å大åææ¯å 容ï¼å³ï¼æ°æ®åºææ¯ã客æ·ç«¯é¡µé¢ææ¯ãJavaå¼åææ¯å.NETå¼åææ¯ï¼
1ãæ°æ®åºææ¯æ¯åºç¨å¼åçåºç¡ææ¯ï¼%以ä¸çåºç¨ç³»ç»éè¦ä½¿ç¨æ°æ®åºæ¥åæ¾ä¸å¡æ°æ®;
2ã客æ·ç«¯é¡µé¢ææ¯æ¯å®¢æ·ç«¯/æå¡å¨å¼å模å¼ä¸æåºæ¬çææ¯ï¼è°æ¥æ¾ç¤ºï¼è¦å¼åä¸ä¸ªå ¸åçåºç¨ç³»ç»ï¼ç¼å客æ·ç«¯é¡µé¢ãå¨æèæ¬å页é¢å¨ç»ï¼éè¦è±æ项ç®ç»%-%çå¼åæ¶é´ï¼å¹¶ä¸å¾å¤ä¼ä¸ä¼æè¿äºå·¥ä½å®æç»æ°å ¥èçåå·¥ï¼æ以çç»ææ¡å®¢æ·ç«¯ææ¯æ¯ç¨åºåçåºæ¬çç´ å »;
3ãJavaææ¯ï¼Javaææ¯æ¯ç®åæ为æµè¡ç软件å¼åææ¯ï¼æ们对家ä¼ä¸çèä½åææ°æ®è¡¨ç¤ºï¼æ.%ç软件å¼åä¼ä¸è¦ä½¿ç¨å°Javaè¯è¨ï¼å æ¤ï¼ACCP7.0课ç¨ä¸å°ç±æµ å ¥æ·±è¯¦ç»è®²è§£è¿é¨ææ¯ã
软件å¼åçåºç¡ç¥è¯æ¯ä»ä¹ï¼
软件å 计ç®æºèåå¨ï¼è计ç®æºçå®è´¨æ¯æ°å¦ï¼æ以计ç®æºçç¥è¯æ¬è´¨ä¸å°±æ¯æ°å¦ç¥è¯ï¼\x0d\ä¹å¯ä»¥è¿ä¹è¯´æ°å¦ç¥è¯ä¹æ¯è®¡ç®æºçåºç¡ç¥è¯ï¼è®¡ç®æºçåºç¡ç¥è¯ä¹æ¯è½¯ä»¶çåºç¡ç¥è¯ãå¨ã软件åå±çè¿ç¨ä¸ï¼è½¯ä»¶çç¥è¯ä¹å¨æ ¢æ ¢å°ç§¯ç´¯ï¼å¾å¤è½¯ä»¶ç¥è¯ä¸æ°å¦å¹¶æ ç´æ¥çèç³»ï¼èãå¨è¿éæ们æè¦è¯´çå°±æ¯çº¯è½¯ä»¶çåºç¡ç¥è¯ã\x0d\æ们å¯ä»¥æ软件çç¥è¯å为两个é¨åï¼ä¸ä¸æè½ç¥è¯åé¢åç¥è¯æ说è¡ä¸ç¥è¯ã\x0d\1ï¼ä¸ä¸æè½ç¥è¯\x0d\ä¸é¨ç¼ç¨è¯è¨ååº\x0d\ä½ å¯ä»¥å¨ä¹¦åºéæ¾å°åè²åæ ·çå ³äºç¼ç¨æ¹é¢ç书ç±ï¼ä½æ¯æå»ºè®®ä½ åªéè¦æ·±å ¥å°ææ¡\x0d\ä¸é¨ä¾¿å¯ï¼èä¸ä»»ä½ç¨åºåé½éè¦çæCè¯è¨ãä½ ææ·±å ¥ææ¡çè¯è¨å¯æå¤ç§éæ©ãå¦æä½ ä»äºçæ¯é©±å¨ç¨åºå¼åï¼ææ³å¿ é¡»è¦ææ¡æ±ç¼è¯è¨ï¼Cè¯è¨ä¹æ¯ä¸ªä¸éçéæ©ï¼èå¦ææ¯åUIçè¯Cï¼ï¼ä¹è®¸æ´å¥½ï¼Javaè¯è¨æ¯è¾éåç½ç»ç¨åºçå¼åï¼å½ç¶JavaScriptå¨googleè¯å®å¾åæ¨å´ã\x0d\对äºç¨åºåæ¥è¯´ï¼ç¼ç¨è¯è¨å°±ç¸å½äºæ¸¸ä¾ æä¸çæ¦å¨ï¼å¯ä»¥æ¯é¿åï¼ä¹å¯æ¯ä»¥æ¯çåï¼å¯ä»¥æ¯å¤§åï¼ä¹å¯ä»¥æ¯åé¦ãè¿äºæ¦å¨åææé¿ï¼èè¦åæ¥è¿äºæ¦å¨çé¿å¤å¿ é¡»åºäºä¸å¥è·¯æ°ä¸ï¼é£ä¹å¯¹äºç¨åºåæ¥è¯´å°±æ¯åºäºæä¸ç§ç¼ç¨è¯è¨ç代ç åºãå¦GNUCçåºå°±æ¯libcæulibcãå¦æä½ æ¯ç¨Cè¯è¨ï¼èä¸ä½ æ¯å¨ç±»UNIXå¹³å°ä¸å¼åï¼é£ä¹ä½ å°±å¿ é¡»æ£ç¡®ç解libcçå·¥ä½åçï¼ä½ 代ç éæè°ç¨çæ¯ä¸ä¸ªå½æ°çè¾å ¥ä¸è¾åºï¼å¯è½çé误ï¼å¯è½çæ§ä¹ï¼å¯¹ç³»ç»å¯è½äº§ççå½±åãæ¯å¦æä¸ä¸ªå½æ°æ¯å¦æ¯å¯åå ¥çï¼è¿æ¯ä¸å¯åå ¥çï¼å¦æåºç°äºå¤çº¿ç¨åæ¶è°ç¨çæ åµä¼åçä»ä¹é误ççç»èä¸çé®é¢ã\x0d\ä¸ç§ç¼ç¨ææ³\x0d\å ¨ä¸çé½æå¹äºæ¯æ³½ä¸çé¢å¯¼ååäºæè½ï¼èå¨ä»çæè½è¡¨è±¡ä¹åæ¯ä»ä¹ï¼æ¯ä»çé©å½\x0d\ç²¾ç¥ï¼æ¯ä»çç¿æºçææ³ãç¼ç¨ä¹ä¸æ ·ï¼å¦æ没æäºç¼ç¨ææ³å°±æ²¡æäºæ导åè¿çå¨åï¼å°±æ²¡æäºåé ççµæçå壤ã软件ç¥è¯åå±å°ç°å¨æ¯è¾å¸¸ç¨çç¼ç¨ææ³å°±æ¯ç»æåï¼æ¨¡ååï¼åé¢å对象åï¼è®¾è®¡æ¨¡å¼ï¼ã\x0d\æäºè¯è¨æ¯å¨æ¨¡åå大è¡å ¶éçåå²èæ¯ä¸è¢«åæåºæ¥çï¼å¦Cè¯è¨ï¼èæäºè¯è¨åæ¯ä¸ºäºæ»¡è¶³é¢å对象çç¼ç¨ææ³èæé åºæ¥çï¼å¦Cï¼ï¼ãæä¸é¨åç¨åºåä¼è®¤ä¸ºCè¯è¨æ¯ç»æåçç¼ç¨è¯è¨æ æ³å®ç°é¢å对象çç¼ç¨ææ³ãå ¶å®ä¸ç¶ï¼Cè¯è¨åæ ·å¯ä»¥å¾å¥½å°å®ç°é¢å对象çç¼ç¨ææ³ï¼åªä¸è¿æäºé¢å对象çå·¥ä½ç±ç¨åºåæ¥åèå·²ãåæ ·ï¼é¢å对象çç¼ç¨è¯è¨ä¹å¯ä»¥ç¨äºå模ååçç¨åºã\x0d\ä¸ç§ä¿¡ä»°\x0d\å°±æææ¥è§¦è¿çç³»ç»éï¼Windowsæåªä¼å®è£ ï¼ä½¿ç¨ï¼VCï¼VBä¹åªè½åä¸äºç®åçå¼åï¼èMACOSä½éªè¿ä¸æ¬¡å®è£ ï¼ä¸è¿æç»è¿æ¯å¤±è´¥äºï¼iPhoneçç³»ç»è¿æ²¡ææºä¼ä½éªè¿ãæ¾ç»å¨AIXä¸åè¿å¼åï¼ç®åæ£å¨Fedora9ä¸åå¼åï¼ç®æ æ¿çCPUæ¯SH4ï¼å°æ¥ä¹å¯è½æ¯MIPSã\x0d\ä¸ç®¡æ¯MACOSï¼Windowsï¼UNIXï¼Linuxçé½æåèªç追éçï¼ææè¿ç§ç°å称为信仰ãå°±æ¿æèªå·±æ¥è¯´ï¼æä¿¡ä»°Linuxï¼Linuxå æ ¸çæºä»£ç 对äºææ¥è¯´å°±æ¯ç¥è¯ã\x0d\æè§å¾å¨Linuxä¸å·¥ä½æ¯ä¸ä»¶å¾å¨±æ¦çäºæ ãå¦æä½ æ¯æ¯è§£å³ä¸äºæ¯è¾æ£æçé®é¢ï¼é½ä¼\x0d\æä¸ç§æå°±æï¼è¿æ¯å¨Windowså¹³å°ä¸æåä¸å°çãæ以对äºè¿ä¸ä¿¡ä»°ï¼æè§å¾è³å°éè¦ç¥éå®çå®è£ ï¼å¯å¨ï¼é ç½®ï¼å®å ¨ï¼å¦å¼å¯¼ç¨åºGRUBï¼ftp,telnet,sshd,smbd,namedççæå¡å¨çé ç½®ï¼ç½ç»å®å ¨çé ç½®ççã\x0d\å¦æä½ è¦å¨Linuxä¸è¿è¡å¼åï¼ä½ å¿ é¡»äºè§£LinuxçAPIï¼æ ååºï¼ä¹å°±æ¯libcãå¦æä½ \x0d\çç¨åºæ¯å¤çº¿ç¨çï¼ä½ è¿å¾ææ¡libpthread.soéçå½æ°ä½¿ç¨æ¹æ³ãGCC,GDB,LD,AS,AR,以\x0d\åMakefileåmakeççå·¥å ·ç使ç¨ãå¦æä½ è½ææ¡find,awk,sed,grep,od,nm,objdump\x0d\çå®ç¨å·¥å ·çè¯ï¼å°ä¼å¤§å¤§æé«ä½ çå·¥ä½æçã\x0d\è¿ï¼å°±æ¯æçä¿¡ä»°ã\x0d\æ»ä¹ä¸å¥è¯ï¼ä¸ç§ç¼ç¨è¯è¨ååºï¼ä¸ç§ç¼ç¨ææ³åä¸ç§ä¿¡ä»°ãä¸åOKï¼\x0d\2ï¼é¢åç¥è¯/è¡ä¸ç¥è¯\x0d\æè®°å¾æç第ä¸ä»½å·¥ä½æ¯é¶è¡ç交æå¼åç¨åºåï¼å½æ¶æ¯ä¸å®¶å¤å å ¬å¸ææå¤æ´¾å°å·¥å\x0d\é¶è¡ï¼æ对工åé¶è¡çä¸å¡ä¸æ æç¥ãä¸è¿ååºè åºä¸æèï¼ç¡¬æ¯ä¸ä¸ªäººå®æäºä¸ä¸ªæä¸æ æç¥ç项ç®ï¼èä» åæ对èªå·±ææ¯å®åçèªä¿¡ã\x0d\ä½äºåæå´æäºåæï¼å 为æ并ä¸æç½ï¼ä¸ºä»ä¹é£ä¸ªæ´æ°è¦ä¹ä»¥ä¸ª0.åå ¥å°æ°æ®åºï¼\x0d\ä¹ä¸ç¥éé¶è¡å¯¹æ°æ®ç精确度æ¯å¤å¤§ï¼ççç»èä¸çé®é¢æä¸æ æç¥ãé£æåªè½æ±ä¸å¤©ä¿ä½ï¼åªå¤©ä¸è¦å¤æ£äºäººå®¶çé±ï¼å¤©åï¼è¿äºæä¹åäºï¼ï¼å½ç¶ä¸è³äºé£ä¹ä¸¥é:)\x0d\åæ¥æç¡®å®åç°èªå·±å¯¹äºé¶è¡è¿å¥ä¸å¡ç³»ç»äºè§£èµ·æ¥æ¯è¾ååï¼æå®æ¿è±ç¹æ¶é´åäºå°\x0d\çCç¨åºä¹ä¸æ¿è±æ¶é´å»è¯é£äºè¦æ¶©çä¸å¡æµç¨ææ¡£ãæ以å¨é£å®¶å ¬å¸å_ä¸å¹´åæè¾èäºã\x0d\ææ³ï¼å¤§é¨åç¨åºåé½æ³åä¸äºç¸å¯¹ææ¯å«éé«çå¼åå·¥ä½ï¼åé£ç§æ´å¤©ä¸æ°æ®åæ°æ®\x0d\åºæ交éçå¼åå·¥ä½ï¼é便æç¹å¿åçç¨åºåä¹ä¸æ¿æå»åï¼å½ç¶å¦æé±è¶³å¤å¤çè¯æè¿æ¯æ¿æç:)\x0d\ä½ç°å¨æåç°æéäºãå 为è¿é¨åä¹æ¯è½¯ä»¶ç¥è¯çä¸é¨åãå°±æ¿æç®åçå·¥ä½æ¥è¯´ï¼ææ¯ä¸ä¸ä¼æ太大çå°é¾ï¼ä½æ¯èå è§æ ¼ä»¥åå ¶æ¶åå°çè§æ ¼ç¸å½çå¤ï¼ææ没æåå¹´æ¶é´æ æ³åå°ç²¾éãè¿å°±æ¯é¢åç¥è¯æ说æ¯è¡ä¸ç¥è¯ãæäºäººä¸çåªåä¸ä»¶äºï¼è¿ä¸ä¸å®è½å好ï¼èæç°å¨åªåäºä¸å°ä¸¤å¹´ï¼è½è§æ¶é´ä¸é¿ä½ä¹ä¸çï¼çºµæ¯ä¸æ æè·ã\x0d\æ以ï¼æè§å¾èªå·±ä»ä¸æ¯ä¸ååæ ¼çå¼åè ã软件å¼åçåºç¡ç¥è¯å æ¬ä¸ä¸ç¥è¯åè¡ä¸\x0d\ç¥è¯ï¼å¦æåºç¡ç¥è¯ä¸å®æ´ï¼é£ä¹è¿ä¸ªç¨åºåä¸ä¼æ¯ä¸ä¸ªåæ ¼ä¸é«æçç¨åºåã
å¦è½¯ä»¶å¼åéè¦æä»ä¹åºç¡ï¼å¦ä¹ 软件å¼åè¦æ以ä¸åºç¡ï¼
1ãåºç¡ç¼ç¨è¯è¨
ç¼ç¨è¯è¨æ¯å¦è½¯ä»¶å¼åçé¥åï¼åå¦è å¥½æ ¹æ®èªèº«çå好æè èä¸è§åéæ©è¯è¨ãç®å主æµçç¼ç¨è¯è¨å æ¬JavaãPHPã.netãC#è¯è¨çï¼æ°æ建议ä»Cè¯è¨å¼å§ï¼æ¯åºç¡ä¹å®ç¨çè¯è¨ï¼ä¹åä¹å¯ä»¥æ ¢æ ¢æ©å±ãå ¶å®å¾å¤ç¼ç¨è¯è¨ä¹é´ææäºéï¼æ¯å¦æ°æ®ç±»åãåéã常éçãå¨å¦ä¹ å®è·µè¿ç¨ä¸ï¼äºè§£ç¼ç¨å 涵ï¼å »æç¼ç¨æç»´ï¼è¿æ ·è·¨è¯è¨å¦ä¹ ä¼é常快ã
2ãæ°æ®åºï¼SQLServerï¼ç¥è¯
é¤äºåºç¡å¦ä¹ ï¼æ°æ®åºç¸å ³çä¹æ¯å¿ ä¸å¯å°çãæ°æ®çåå¨ãè°ç¨å¨è½¯ä»¶å¼åè¿è¡è¿ç¨ä¸å¿ ä¸å¯å°ã
3ãwebç¸å ³ç¥è¯
主è¦å为HTMLãCSSãJavaScript
软件å¼åéè¦å¦ä¹ ä»ä¹åºç¡ç¥è¯å¦ä¹ 软件å¼åç»å¸¸ä¼æ¶åå°æ°å¦åè±è¯çç¥è¯ï¼æ以éè¦æä¸å®çæ°å¦åè±è¯åºç¡ï¼è¿æ ·å¯ä»¥è®©è½¯ä»¶å¼ååå¾äºåååãåéæè²å°±æ线ä¸å è´¹ç软件å¼åå ¬å¼è¯¾ï¼ã
åéæè²éç¨å ¨ç¨é¢æé«åè´¨ãé«ä½éªå¹å »æ¨¡å¼ï¼å¦ç§å¤§çº²ç´§è·ä¼ä¸éæ±ï¼æ¥æå½å ä¸ä½åæå¦ç®¡çåå¦åæå¡ï¼å¨èä¸æè²åå±éè·¯ä¸ä¸ææ¢ç´¢åè¡ãå¦æä½ æ é¿è±è¯åæ°å¦ï¼ä½ å¯ä»¥è·³è¿è¿ä¸æ¥ã软件çæä½æ¯éè¿æç§ç¨åºè¯è¨æ¥å®ç°çï¼æ以å¦å¥½ç¨åºè¯è¨æ¯å好软件å¼åçå¿ ä¿®è¯¾ãæ以ï¼å¦æä½ æ³å¦è½¯ä»¶å¼åï¼ç¬¬äºæ¥å°±æ¯éæ©ä¸é¨ç¼ç¨å¼åè¯è¨æ¥å¦ä¹ ï¼éä¸ç²¾åå¦å¥½ä¸é¨è¯è¨ãä¸è¬æ¥è¯´ï¼è¦æ³å好软件å¼åï¼è³å°è¦å¦ä¸é¨ç¼ç¨è¯è¨ãç®å主æµçç¼ç¨è¯è¨æJavaãPHPãC#è¯è¨ï¼è½¯ä»¶å¼åå½¢å¼æå¤ç§ï¼å å¦å¥½è¿äºåºç¡è¯è¨ï¼ä¹ååæ ¢æ ¢æ©å±ãé¤äºå¦ä¹ åºç¡è¯è¨ï¼è¿è¦å¦ä¹ æ°æ®åºçç¥è¯ãå¨è½¯ä»¶å¼åä¸ï¼æ°æ®çåå¨åè°ç¨è³å ³éè¦ãHTMLï¼CSSï¼Javaèæ¬çç¸å ³çå端è¯è¨ä¹æ¯éè¦ææ¡çï¼ç»è¿è¿å个å¦ä¹ é¶æ®µï¼æ们已ç»åºæ¬ææ¡äºä¸å¥å®æ´ç软件å¼åæµç¨ï¼åé¢æ·±å ¥å¦ä¹ çè¯ï¼å°±éè¦ææ¡åç§æ¡æ¶ãåéå®ç½æ¯æ¥æ´æ°ææ°è½¯ä»¶å¼ååºç¡ç¥è¯å 容ï¼å·©åºæ¥å¸¸å¦ä¹ ä¸çåºç¡æè½ãæ´æå è´¹ç软件å¼åè§é¢æç¨å¸®å©å¦åå¿«éå¦ä¹ ã
软件å¼åéè¦æä»ä¹åºç¡ï¼è½¯ä»¶å¼å主è¦å为WEBå¼åã移å¨ç«¯å¼åãåµå ¥å¼å¼åä¸ä¸ªå¼åæ¹åï¼ä¸åæ¹åçå¦ä¹ å 容ä¹ä¸åã
1ãWEBå为å端å¼ååå端å¼åï¼å端å¼åéè¦å¦CSS3ãJavaScriptãHtml5ï¼å端å¼åå¼åéè¦å¦PHPãPythonãJavaã
2ã移å¨ç«¯å¼åéè¦å¦OCæè Swiftã
3ãåµå ¥å¼å¼åéè¦å¦Cè¯è¨ã计ç®æºåºç¡ç¥è¯çã
VirtualAPP源码解析-Native Hook技术
Native Hook技术在VirtualAPP中的应用背景在于虚拟APP的文件访问重定向。VirtualAPP作为子进程启动一个虚拟APP时,文件存储路径会默认指向VirtaulAPP的data目录。这可能导致文件访问冲突,且无法实现APP间的隔离。VirtualAPP通过Native Hook技术解决了这个问题,双龙排序优化指标源码让每个APP有独立的文件存储路径。
实现原理关键在于VClientImpl的startIOUniformer方法,通过进行存储路径映射,将子进程访问的目录路径转换为虚拟app路径。这个过程通过调用IOUniformer.cpp的startUniformer方法实现。我们知道Android系统基于Linux内核,会所点评源码文件读写操作通过库函数进行系统调用。因此,Native Hook技术实现方式是替换libc库函数的方法,将输入参数替换为虚拟app路径,从而实现文件访问路径的重定向。
要确定需要hook的函数,开发者需要查看libc源码。Native Hook技术有PLT Hook与Inline Hook两种实现方式。PLT Hook主要通过替换程序链接表中的地址,而Inline Hook则直接修改汇编代码,实现更广泛的会员资源码场景与更强的能力。虚拟app使用的第三方开源项目Cydia Substrate实现了Inline Hook方案,而爱奇艺开源的xHook则采用了PLT Hook方案。虚拟app通过宏定义灵活运用这两种Hook方案,实现对libc库函数的替换。
Native Hook技术的实现过程涉及到so动态链接、ELF文件格式、汇编指令等知识,其具体步骤包括定义Hook调用和替换方法。例如,通过HOOK_SYMBOL宏定义函数指针,HOOK_DEF宏定义替换函数,苹果iapp源码最终通过hook_function方法实现Hook操作。MSHookFunction函数即为Cydia Substrate提供的Hook能力。
学习Native Hook技术需要逐步积累,理解其原理和实现过程需要时间和实践。后续文章将深入探讨MSHookFunction的具体实现原理,进一步帮助读者掌握Native Hook技术。
GCC 源码编译安装
前言
本文主要介绍如何在特定条件下,通过源码编译安装GCC(GNU Compiler Collection)4.8.5版本。在Linux环境下,特别是遇到较老工程代码和低版本GCC适配问题时,网络仓库不可用,ABC 音乐 源码可通过下载源码进行本地编译安装。文章总结了该过程的步骤,以期帮助读者解决类似需求。
Linux系统版本:SUSE Linux Enterprise Server SP5 (aarch) - Kernel \r (\l)
GCC版本:gcc-4.8.5
步骤如下:
1,源码下载
直接在Linux终端执行:wget ftp.gnu.org/gnu/gcc/gcc...
或手动下载:ftp://gcc.gnu.org/pub/gcc/infrastructure
选取对应的gcc版本下载。
2,解压并进入目录
解压下载的tar包:tar -jxvf gcc-4.8.5.tar.bz2
进入解压后的目录:cd gcc-4.8.5
3,配置依赖库
联网情况下:cd gcc-4.8.5/
./contrib/download_prerequisites
无法联网时,手动下载依赖库(如mpfr、gmp、mpc)并上传到指定目录,然后分别解压、重命名并链接。
4,创建编译存放目录
在gcc-4.8.5目录下执行:mkdir gcc-build-4.8.5
5,生成Makefile文件
cd gcc-build-4.8.5
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
推荐配置时,根据环境调整参数,如X_环境下的`--disable-libsanitizer`。
6,执行编译
make(可能耗时较长)
解决可能出现的问题,如libc_name_p和struct ucontext uc,通过参考gcc.gnu.org/git或直接覆盖相关文件。
7,安装GCC
在gcc-build-4.8.5目录下执行:make install
安装完成后,可直接解压并安装。
8,配置环境变量
执行命令:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/gcc-4.8.5/mpc:/root/gcc-4.8.5/gmp:/root/gcc-4.8.5/mpfr
确保路径一致,执行 source /etc/profile 使环境变量生效。
9,检查安装情况
通过`gcc -v`和`g++ -v`验证GCC版本。
,库升级
遇到动态库未找到问题时,需升级gcc库,通过查找和替换最新库文件解决。
,卸载系统自带的gcc
以root用户执行:rpm -qa |grep gcc | xargs rpm -e --nodeps
,修改ld.so.conf文件
编辑文件:vi /etc/ld.so.conf,在最下面添加实际路径,如/usr/local/lib和/usr/local/lib。
执行 ldconfig /etc/ld.so.conf。
,修改GCC链接
确保GCC及其相关工具的正确链接,使用`ll /usr/bin/gcc*`和`ll /usr/bin/g++*`检查链接结果。
至此,GCC源码编译安装流程完成,可满足特定环境下的GCC版本需求。
linux编译头文件usr/local/includelinux编译头文件
linux中header是什么?完全没看懂楼主要什么。
Linux-headers是Linux的开发头文件,应该位于/usr/include/linux里面。不过有的系统习惯放/usr/src里面一分(这种情况很少,因为正规的地方是/lib/modules/内核版本>/的某个目录,印象里是他的build里),因为有的软件去这里寻找当前内核的源代码来调用当前源代码的header进行编译。
/usr/include里面的Linux内核头文件,是专门编译libc用的。不能保证内核模块的编译要求。真正的Linux不可能给这个名字。
/usr/src里面习惯是放完整的Linux源代码。但具体名字,要看系统的定义了,有的叫linux-sources、kernel-source什么的。有的可能是改进版的名字。
Linux编写内核模块编译时找不到头文件?
-I/usr/src/linux-headers-2.6.-/include其中,-I和后面的路径没有空格-I/usr/src/linux-headers-2.6.-/include一般也很少直接用gcc命令,大部分是用makefile,make-Ckernel_pathmodules
linux编译器头文件配置?
-I/usr/src/linux-headers-2.6.-/include其中,-I和后面的路径没有空格-I/usr/src/linux-headers-2.6.-/include一般也很少直接用gcc命令,大部分是用makefile,make-Ckernel_pathmodules