




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
php內核分析之擴展以下是精心為大家的關于 php內核擴展方面的分析,歡迎閱讀參考!更多內容請關注!這里閱讀的php版本為,閱讀代碼的平臺為 linux。我們研究下反射這個擴展。反射這個擴展目錄是存在在: ext/reflection 。其實里面的代碼很簡單。一個.h文件,一個.c文件。我們先看下.c文件中,會看到很多 ZEND_METHODZEND_METHOD(reflection_function,getReturnType){...}對應的宏:#defineZEND_METHOD(classname,name)ZEND_NAMED_FUNCTION(ZEND_MN(classname##_##name))#defineZEND_NAMED_FUNCTION(name)voidname(INTERNAL_FUNCTION_PARAMETERS)#defineZEND_MN(name)zim_##name#defineINTERNAL_FUNCTION_PARAMETERSzend_execute_data*execute_data,zval*return_value這里的##代表的是連接,展開實際上就是:voidzim_reflection_function_getReturnType(zend_execute_data*execute_data,zval*return_value)總而言之,我們這里是使用 ZEND_METHOD定義了一個函數(shù)zim_reflection_function_getReturnType ,那從執(zhí)行代碼是怎么調用到這里的呢?好吧,所以我們這里是看不到擴展的調用堆棧的。 那我們用gdb看下調用堆棧。寫個使用反射擴展的腳本:123classB4{5publicfunctiontest():B6{78}9}1011functiongetB():B12{1314}1516$rc=newReflectionMethod('B','test');17var_dump((string)$rc->getReturnType(),$rc->getReturnType());1819$rc=newReflectionFunction('getB');20var_dump((string)$rc->getReturnType(),$rc->getReturnType());使用gdb進行打點,我們看了下 getReturnType的擴展定義,里面有個在擴展代碼中的函數(shù) reflection_type_factory ,就使用這個打點了。(gdb)breflection_type_factory(gdb)run-f/home/xiaoju/software/php7/demo/echo.php(gdb)s(gdb)bt#0reflection_type_factory(fptr=0x7ffff6004210,closure_object=0x0,arg_info=0x7ffff6079048,object=0x7ffff60140d0)at/home/xiaoju/webroot/php-src/php-src-master/ext/reflection/php_reflection.c:1280#10x0000000000760d23inZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(execute_data=0x7ffff6014030)at/home/xiaoju/webroot/php-src/php-src-master/Zend/zend_vm_execute.h:1097#20x000000000073fc88inexecute_ex(ex=)at/home/xiaoju/webroot/php-src/php-src-master/Zend/zend_vm_execute.h:432#30x000000000078b670inzend_execute(op_array=0x7ffff60782a0,return_value=)at/home/xiaoju/webroot/php-src/php-src-master/Zend/zend_vm_execute.h:474#40x00000000006e48a3inzend_execute_scripts(type=8,retval=0x0,file_count=3)at/home/xiaoju/webroot/php-src/php-src-master/Zend/zend.c:1464#50x0000000000684870inphp_execute_script(primary_file=0x7fffffffe090)at/home/xiaoju/webroot/php-src/php-src-master/main/main.c:2541#60x000000000078e9eaindo_cli(argc=3,argv=0xee1bc0)at/home/xiaoju/webroot/php-src/php-src-master/sapi/cli/php_cli.c:994#70x000000000078f1eainmain(argc=3,argv=0xee1bc0)at/home/xiaoju/webroot/php-src/php-src-master/sapi/cli/php_cli.c:1387(gdb)好了,很清晰可以看到這個脈絡:main->do_cli->php_execute_scripts->zend_execute->execute_ex->ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER->reflection_type_factory對于main,do_cli,php_execute_scripts,zend_execute,execute_ex 根據(jù)前面的main函數(shù)分析,我們很容易能夠理解各個函數(shù)的作用。換句話說,execute_ex才是實際上調用 opcode最終最重要的函數(shù)。對照這個腳本的 opcode:L1-21{main}()/home/xiaoju/software/php7/demo/echo.php-0x7fd6a127f000+30opsL3#0NOPL11#1NOPL16#2NEW"ReflectionMethod"@1L16#3SEND_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45862-2025鍋爐碳排放測試與計算方法
- 2023工作場所空氣中環(huán)氧乙烷、環(huán)氧丙烷和環(huán)氧氯丙烷的溶劑解吸-氣相色譜法
- 主題5 散裝“蘇超”火爆出圈-2026年高考語文之素材積累
- 雨鈴鐺教學設計
- 閱讀理解-2024年高中英語學業(yè)水平考試考點歸納與測試(江蘇專用)原卷版
- 單板加工職業(yè)技能認證體系可持續(xù)發(fā)展研究考核試卷
- 口碑營銷對品牌忠誠度培養(yǎng)的作用機制研究考核試卷
- 情境模擬培訓法考核試卷
- 安全事件應急響應的心理應激反應研究與應對策略考核試卷
- 風險教育與培訓體系完善企業(yè)風險預防策略制定考核試卷
- 2025年貴州安大航空鍛造有限責任公司-企業(yè)報告(業(yè)主版)
- 設計總監(jiān)協(xié)議書
- 河北省廊坊市三河市2025屆物理八下期末考試模擬試題含解析
- 2025軟科學計劃研究項目申報書
- 電網(wǎng)工程設備材料信息參考價2025年第一季度
- 貸款押金合同協(xié)議書范本
- 社保補助協(xié)議書范本
- 內分泌性高血壓篩查專家共識(2025版)
- 關鍵崗位廉潔從業(yè)培訓
- GB 5009.247-2025食品安全國家標準食品中紐甜的測定
- 防電氣線路老化不規(guī)范
評論
0/150
提交評論