一種在應用程序中的跳轉處理方法、裝置及智能終端的制作方法
【專利摘要】本發明實施例公開了一種在應用程序中的跳轉處理方法、裝置及智能終端,其中,所述方法包括:在執行到應用程序中的調用函數時,獲取所述調用函數中的跳轉指令;所述跳轉指令用于指示目標地址,所述調用函數用于使所述應用程序從所述調用函數跳轉到所述目標地址所關聯的被調用函數;根據所述跳轉指令中的目標地址確定被調用函數的入口地址;根據確定的入口地址開始執行所述被調用函數。采用本發明實施例,可簡便快捷地實現應用程序中函數的跳轉處理。
【專利說明】
一種在應用程序中的跳轉處理方法、裝置及智能終端
技術領域
[0001]本發明涉及計算機應用技術領域,尤其涉及一種在應用程序中的跳轉處理方法、裝置及智能終端。
【背景技術】
[0002]智能終端中所使用的ARM架構,稱作進階精簡指令集機器架構(英文全稱為:Advanced RISC Machine,或者為:Acorn RISC Machine)。該架構中包括內置鉤子Inlinehook機制,使得在基于動態庫執行內部函數調用時,能夠跳轉到自定義的外部函數上執行,實現新的自定義功能。
[0003]目前,在Inlinehook機制中常用的技術方案是修改被hook函數頭部的機器碼,達到跳轉到某個外部函數(被調用函數)的目的。例如,被hook函數B頭部的機器碼被修改為跳轉到函數C,那么應用程序的調用函數A通過調用被hook函數B,即可跳轉到函數C,并執行函數C。
[0004]上述實現函數跳轉調用的方式較為復雜,并且對被hook函數的修改會影響到與該被hook函數關聯的其他調用函數。
【發明內容】
[0005]本發明實施例提供一種在應用程序中的跳轉處理方法、裝置及智能終端,可簡便快捷地實現應用程序中函數的跳轉處理。
[0006]—方面,本發明實施例提供了一種在應用程序中的跳轉處理方法,包括:
[0007]在執行到應用程序中的調用函數時,獲取所述調用函數中的跳轉指令;所述跳轉指令用于指示目標地址,所述調用函數用于使所述應用程序從所述調用函數跳轉到所述目標地址所關聯的被調用函數;
[0008]根據所述跳轉指令中的目標地址確定被調用函數的入口地址;
[0009]根據確定的入口地址開始執行所述被調用函數。
[0010]其中可選地,所述跳轉指令中記錄的目標地址為內存中空閑空間的地址,所述空閑空間中設置有配置指令,所述根據所述跳轉指令中的目標地址確定被調用函數的入口地址,包括:
[0011]根據所述跳轉指令中的目標地址確定出內存中設置的配置指令;
[0012]根據所述配置指令,得到被調用函數的入口地址。
[0013]其中可選地,所述空閑空間是指:在加載動態庫SO文件時,被SO文件占用的內存頁中沒有存儲數據的內存空間。
[0014]其中可選地,所述配置指令用于指示修改寄存器的值并將包括在該配置指令中的被調用函數的入口地址寫入到所述寄存器中。
[0015]其中可選地,所述根據確定的入口地址開始執行所述被調用函數,包括:
[0016]在執行到調用函數中的所述跳轉指令的下一指令時,讀取所述寄存器中寫入的所述被調用函數的入口地址;
[0017]從所述入口地址開始執行所述被調用函數。
[0018]其中可選地,所述在執行到應用程序中的調用函數時,獲取所述調用函數中的跳轉指令之前,還包括:
[0019]從應用程序中的調用函數的首地址開始確定跳轉指令,并將確定的跳轉指令記錄的地址配置為目標地址的偏移地址。
[0020]另一方面,本發明實施例相應地提供了一種在應用程序中的跳轉處理裝置,包括:
[0021]獲取模塊,用于在執行到應用程序中的調用函數時,獲取所述調用函數中的跳轉指令;所述跳轉指令用于指示目標地址,所述調用函數用于使所述應用程序從所述調用函數跳轉到所述目標地址所關聯的被調用函數;
[0022]確定模塊,用于根據所述跳轉指令中的目標地址確定被調用函數的入口地址;
[0023]執行模塊,用于根據確定的入口地址開始執行所述被調用函數。
[0024]其中可選地,所述跳轉指令中記錄的目標地址為內存中空閑空間的地址,所述空閑空間中設置有配置指令;
[0025]所述確定模塊,具體用于根據所述跳轉指令中的目標地址確定出內存中設置的配置指令;根據所述配置指令,得到被調用函數的入口地址。
[0026]其中可選地,所述空閑空間是指:在加載動態庫SO文件時,被SO文件占用的內存頁中沒有存儲數據的內存空間。
[0027]其中可選地,所述配置指令用于指示修改寄存器的值并將包括在該配置指令中的被調用函數的入口地址寫入到所述寄存器中。
[0028]其中可選地,所述執行模塊具體用于在執行到調用函數中的所述跳轉指令的下一指令時,讀取所述寄存器中寫入的所述被調用函數的入口地址;從所述入口地址開始執行所述被調用函數。
[0029]其中可選地,所述裝置還包括:
[0030]預置模塊,用于從應用程序中的調用函數的首地址開始確定跳轉指令,并將確定的跳轉指令記錄的地址配置為目標地址的偏移地址。
[0031]再一方面,本發明實施例相應地還提供了一種智能終端,包括處理器;
[0032]所述處理器,用于在執行到應用程序中的調用函數時,獲取所述調用函數中的跳轉指令;所述跳轉指令用于指示目標地址,所述調用函數用于使所述應用程序從所述調用函數跳轉到所述目標地址所關聯的被調用函數;根據所述跳轉指令中的目標地址確定被調用函數的入口地址;根據確定的入口地址開始執行所述被調用函數。
[0033]本發明實施例能夠通過對調用函數中的跳轉指令進行配置以及處理,直接跳轉到跳轉指令指示的目標地址所關聯的被調用函數,簡便快捷地實現有針對性的函數跳轉調用,只針對單個調用函數完成函數跳轉和調用,不會影響其他的調用函數。
【附圖說明】
[0034]為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
[0035]圖1是本發明實施例的一種在應用程序中的跳轉處理方法的流程示意圖;
[0036]圖2是本發明實施例的一種在應用程序中的跳轉處理方法的流程示意圖;
[0037]圖3是本發明實施例的一種在應用程序中的跳轉處理裝置的結構示意圖;
[0038]圖4是本發明實施例的一種智能終端的結構示意圖。
【具體實施方式】
[0039]下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0040]本發明實施例中,通過對應用程序中的某個調用函數包括的跳轉指令進行修改配置,將該跳轉指令配置為用于表示需要被調用函數的地址的指令,以便于在執行到該跳轉指令后,能夠跳轉到被調用的函數。其中,在出現由于跳轉指令偏移地址的大小受限,而使得該跳轉指令無法表示出被調用函數的地址的情況時,可以將該跳轉指令先表示為一個內存中加載動態庫SO后產生的被SO文件占用但沒有數據的空閑空間的地址,在執行到該跳轉指令后,可以先跳轉到SO內部的空閑地址,然后再根據該空閑空間中預設的指令來修改終端寄存器的方式完成跳轉,進而執行被調用函數。
[0041]具體的,請參見圖1,是本發明實施例的一種在應用程序中的跳轉處理方法的流程示意圖,本發明實施例的所述方法可以由智能終端中的處理器來執行,所述智能終端包括智能手機、平板電腦、個人電腦PC等設備,具體的,本發明實施例的所述方法包括如下步驟。
[0042]SlOl:在執行到應用程序中的調用函數時,獲取所述調用函數中的跳轉指令;所述跳轉指令指示有目標地址,所述調用函數用于使所述應用程序從所述調用函數跳轉到所述目標地址所關聯的被調用函數,即:在執行到所述應用程序的調用函數后,可以跳轉到所述目標地址所關聯的被調用函數,并執行該被調用函數。
[0043]在ARM架構中,函數調用時的跳轉指令對應到匯編代碼包括BL和BLX指令等,其中,BL為帶鏈接跳轉、BLX為帶鏈接跳轉并切換指令集,通過這兩個指令集,可以實現函數的調用跳轉。
[0044]為了達到從調用函數跳轉到某個所需的被調用函數的目的,在執行所述步驟SlOl之前,可以從所述調用函數的首地址開始尋找所有的BL和BLX指令。在找到調用函數中跳轉指令(BL或BLX)的地址之后,可以把該地址下跳轉指令(BL或BLX指令)中記錄的地址替換為所需的目標地址,以便于在該跳轉指令中記錄關于被調用函數的目標地址。
[0045]在本發明實施例中,可以僅在所述調用函數中包括的跳轉指令中配置包括關于被調用函數的偏移地址。由于所述調用函數的地址為已知,因此,在后續執行到所述跳轉指令時,根據所述跳轉指令中的偏移地址和所述調用函數的地址,可以計算出關于被調用函數的目標地址。
[0046]S102:根據所述跳轉指令中的目標地址確定被調用函數的入口地址。
[0047]所述目標地址可以直接為所述被調用函數的入口地址。或者,也可以為關于被調用函數的中轉地址,在確定出目標地址后,可以首先找到目標地址所指示的空閑空間,然后再從該空閑空間中得到所述被調用函數的入口地址。
[0048]S103:根據確定的入口地址開始執行所述被調用函數。
[0049]在確定了被調用函數的入口地址后,即可從該入口地址所對應的存儲空間中存儲的指令開始,執行所述被調用函數,實現該被調用函數的功能。
[0050]本發明實施例能夠通過對調用函數中的跳轉指令進行配置以及處理,直接跳轉到跳轉指令指示的目標地址所關聯的被調用函數,簡便、快捷地實現函數跳轉調用。并且本發明實施例可以只針對單個調用函數完成函數跳轉和調用,不會影響其他的調用函數。
[0051]再請參見圖2,是本發明實施例的一種在應用程序中的跳轉處理方法的流程示意圖,本發明實施例的所述方法可以由智能終端中的處理器來執行,所述智能終端包括智能手機、平板電腦等設備,具體的,本發明實施例的所述方法包括如下步驟。
[0052]S201:從應用程序中的調用函數的首地址開始確定跳轉指令,并將確定的跳轉指令記錄的地址配置為目標地址的偏移地址。
[0053]當需要從調用函數跳轉到某個所需的被調用函數時,可以先對所述調用函數中的跳轉指令記錄的偏移地址進行修改,將其替換為所述所需的被調用函數相對于調用函數所在地址的偏移地址。
[0054]具體的,跳轉指令包括BL或BLX指令等,在所述調用函數的跳轉指令中可以記錄關于所述被調用函數的偏移地址,根據所述調用函數的地址和記錄的偏移地址,計算得到所述被調用函數的目標地址,因此,所述調用函數中的跳轉指令用于指示目標地址。
[0055]跳轉指令中記錄關于所述被調用函數的偏移地址是指:所述被調用函數的入口地址相對于所述調用函數的入口地址的偏移地址;或者,一個包括有被調用函數的入口地址的空閑空間的地址相對于所述調用函數的入口地址的偏移地址,例如內存中的某個空閑空間的地址相對于所述調用函數的入口地址的偏移地址。
[0056]S202:在執行到應用程序中的調用函數時,獲取所述調用函數中的跳轉指令;應用程序中的所述調用函數主要用于使所述應用程序從所述調用函數跳轉到所述目標地址所關聯的被調用函數,即跳轉到所需的某個被調用函數。
[0057]S203:根據所述跳轉指令中的目標地址確定出內存中設置的配置指令。所述跳轉指令所指示的目標地址為內存中空閑空間的地址,所述空閑空間中設置有配置指令。在本發明實施例中,所述空閑空間包括:在加載動態庫SO文件時,被SO文件占用的內存頁中沒有存儲數據的內存空間。
[0058]在ARM結構中,跳轉指令(BL或BLX指令)對目標地址的偏移大小有限制,如果偏移地址的大小超過兩個字節,則無法有效地將偏移地址記載到跳轉指令中。因此,對于超過兩個字節的偏移地址,本發明實施例采取的方式是先跳轉到SO內部的空閑地址,然后再完成函數跳轉。
[0059]具體的,SO在被系統加載到內存中時,是按照段進行映射的。每一個段是所有具有相同的讀寫權限的部分sect1n的集合,映射的時候是按頁為單位進行映射,最后不足一頁的部分也會占用一頁的內存。本發明實施例利用這一部分被占用但沒有存儲數據的內存來存儲一段配置指令,基于該段指令最后能夠跳轉到所述被調用函數。
[0060]S204:根據所述配置指令,得到被調用函數的入口地址。所述配置指令用于指示修改寄存器的值,將包括在該配置指令中的被調用函數的入口地址寫入到所述寄存器中。
[0061]S205:在執行到調用函數中的所述跳轉指令的下一指令時,讀取所述寄存器中寫入的所述被調用函數的入口地址。
[0062]S206:從所述入口地址開始執行所述被調用函數。在確定了被調用函數的入口地址后,即可從該入口地址所對應的存儲空間中存儲的指令,開始執行所述被調用函數,實現該被調用函數的功能。
[0063]本發明實施例能夠通過對調用函數中的跳轉指令進行配置以及處理,直接跳轉到跳轉指令指示的目標地址所關聯的被調用函數,簡便、快捷地實現函數跳轉調用。并且本發明實施例可以只針對單個調用函數完成函數跳轉和調用,不會影響其他的調用函數。
[0064]再請參見圖3,是本發明實施例的一種在應用程序中的跳轉處理裝置的結構組成示意圖,本發明實施例的所述裝置可以應用在智能終端中,所述智能終端包括智能手機、平板電腦等設備,具體的,所述裝置包括如下模塊。
[0065]獲取模塊301,用于在執行到應用程序中的調用函數時,獲取所述調用函數中的跳轉指令;所述跳轉指令用于指示目標地址,所述調用函數用于使所述應用程序從所述調用函數跳轉到所述目標地址所關聯的被調用函數;確定模塊302,用于根據所述跳轉指令中的目標地址確定被調用函數的入口地址;執行模塊303,用于根據確定的入口地址開始執行所述被調用函數。
[0066]為了達到從調用函數跳轉到某個所需的被調用函數的目的,在所述獲取模塊301獲取所述調用函數中的跳轉指令之前,可以從所述調用函數的首地址開始尋找所有的BL和BLX指令。在找到調用函數中跳轉指令(BL或BLX)的地址之后,可以把該地址下跳轉指令(BL或BLX)中記錄的目標地址替換為所需地址,以便于在該跳轉指令中記錄關于被調用函數的目標地址。
[0067]在本發明實施例中,可以在所述調用函數包括的跳轉指令(BL或BLX指令)中配置關于被調用函數的偏移地址。由于所述調用函數的地址為已知,因此,在所述獲取模塊301獲取到跳轉指令后,所述確定模塊302能夠根據所述跳轉指令中的偏移地址和所述調用函數的地址,可以計算出關于被調用函數的目標地址。
[0068]所述目標地址可以直接為所述被調用函數的入口地址。或者,也可以為關于被調用函數的中轉地址,在確定出目標地址后,所述確定模塊302可以首先找到目標地址所指示的空閑空間,然后再從該空閑空間中得到所述被調用函數的入口地址。
[0069]在確定了被調用函數的入口地址后,所述執行模塊303即可從該入口地址所對應的存儲空間中存儲的指令,開始執行所述被調用函數,實現該被調用函數的功能。
[0070]進一步可選地,所述跳轉指令中記錄的目標地址為內存中空閑空間的地址,所述空閑空間中設置有配置指令;所述確定模塊302,具體用于根據所述跳轉指令中的目標地址確定出內存中設置的配置指令;根據所述配置指令,得到被調用函數的入口地址。
[0071]進一步可選地,所述空閑空間是指:在加載動態庫SO文件時,被SO文件占用的內存頁中沒有存儲數據的內存空間。
[0072]進一步可選地,所述配置指令用于指示修改寄存器的值并將包括在該配置指令中的被調用函數的入口地址寫入到所述寄存器中。
[0073]進一步可選地,所述執行模塊303具體用于在執行到調用函數中的所述跳轉指令的下一指令時,讀取所述寄存器中寫入的所述被調用函數的入口地址;從所述入口地址開始執行所述被調用函數。
[0074]進一步可選地,本發明實施例的所述裝置還可以包括:
[0075]預置模塊304,用于從應用程序中的調用函數的首地址開始確定跳轉指令,并將確定的跳轉指令記錄的地址配置為目標地址的偏移地址。
[0076]本發明實施例中所述裝置的各個模塊的具體功能實現可參考圖1和圖2所對應方法實施例中相關步驟的具體的描述,在此不贅述。
[0077]本發明實施例能夠通過對調用函數中的跳轉指令進行配置以及處理,直接跳轉到跳轉指令指示的目標地址所關聯的被調用函數,簡便快捷地實現有針對性的函數跳轉調用,只針對單個調用函數完成函數跳轉和調用,不會影響其他的調用函數。
[0078]再請參見圖4,是本發明實施例的一種智能終端的結構示意圖,本發明實施例的所述智能終端可以包括電源、主板、攝像頭、用戶接口以及外殼等結構,進一步地,還包括處理器401、存儲器402以及內存403。所述處理器401、存儲器402以及內存403之間可以通過總線404相連。
[0079]所述總線404可以分為地址總線、數據總線、控制總線等。為便于表示,圖4中僅用一條粗線表示,但并不表示僅有一根總線或一種類型的總線。
[0080]所述存儲器402可以包括易失性存儲器(volatile memory),例如隨機存取存儲器(random-access memory,RAM);存儲器也可以包括非易失性存儲器(non-voIati Iememory ),例如快閃存儲器(flash memory),硬盤(hard disk drive,HDD)或固態硬盤(solid-state drive,SSD);所述存儲器402還可以包括上述種類的存儲器的組合。
[00811 所述處理器401可以是中央處理器(central processing unit,CPU),所述存儲器402還用于存儲程序指令以及動態庫SO等相關文件,這些相關的文件數據可以加載到所述內存中。所述處理器401可以調用所述程序指令,實現一種在應用程序中的跳轉處理方法。
[0082]具體的,所述處理器401用于在執行到應用程序中的調用函數時,獲取所述調用函數中的跳轉指令;所述跳轉指令用于指示目標地址,所述調用函數用于使所述應用程序從所述調用函數跳轉到所述目標地址所關聯的被調用函數;根據所述跳轉指令中的目標地址確定被調用函數的入口地址;根據確定的入口地址開始執行所述被調用函數。
[0083]其中可選地,所述跳轉指令中記錄的目標地址為內存中空閑空間的地址,所述空閑空間中設置有配置指令,所述處理器401具體用于根據所述跳轉指令中的目標地址確定出內存中設置的配置指令;根據所述配置指令,得到被調用函數的入口地址。
[0084]其中可選地,所述空閑空間是指:在加載動態庫SO文件時,被SO文件占用的內存頁中沒有存儲數據的內存空間。
[0085]其中可選地,所述配置指令用于指示修改寄存器的值并將包括在該配置指令中的被調用函數的入口地址寫入到所述寄存器中。
[0086]其中可選地,所述處理器401具體用于在執行到調用函數中的所述跳轉指令的下一指令時,讀取所述寄存器中寫入的所述被調用函數的入口地址;從所述入口地址開始執行所述被調用函數。
[0087]其中可選地,所述處理器401還用于從應用程序中的調用函數的首地址開始確定跳轉指令,并將確定的跳轉指令記錄的地址配置為目標地址的偏移地址。
[0088]本發明實施例中所述處理器401的具體實現可參考圖1和圖2所對應方法實施例中相關步驟的具體描述,在此不贅述。
[0089]本發明實施例能夠通過對調用函數中的跳轉指令進行配置以及處理,直接跳轉到跳轉指令指示的目標地址所關聯的被調用函數,簡便快捷地實現有針對性的函數跳轉調用,只針對單個調用函數完成函數跳轉和調用,不會影響其他的調用函數。
[0090]以上所揭露的僅為本發明一種較佳實施例而已,當然不能以此來限定本發明之權利范圍,本領域普通技術人員可以理解實現上述實施例的全部或部分流程,并依本發明權利要求所作的等同變化,仍屬于發明所涵蓋的范圍。
【主權項】
1.一種在應用程序中的跳轉處理方法,其特征在于,包括: 在執行到應用程序中的調用函數時,獲取所述調用函數中的跳轉指令;所述跳轉指令指示有目標地址,所述調用函數用于使所述應用程序從所述調用函數跳轉到所述目標地址所關聯的被調用函數; 根據所述跳轉指令中的目標地址確定被調用函數的入口地址; 根據確定的入口地址開始執行所述被調用函數。2.如權利要求1所述的方法,其特征在于,所述跳轉指令中記錄的目標地址為內存中空閑空間的地址,所述空閑空間中設置有配置指令,所述根據所述跳轉指令中的目標地址確定被調用函數的入口地址,包括: 根據所述跳轉指令中的目標地址確定出內存中設置的配置指令; 根據所述配置指令,得到被調用函數的入口地址。3.如權利要求2所述的方法,其特征在于,所述空閑空間是指:在加載動態庫SO文件時,被SO文件占用的內存頁中沒有存儲數據的內存空間。4.如權利要求2或3所述的方法,其特征在于,所述配置指令用于指示修改寄存器的值并將包括在該配置指令中的被調用函數的入口地址寫入到所述寄存器中。5.如權利要求4所述的方法,其特征在于,所述根據確定的入口地址開始執行所述被調用函數,包括: 在執行到調用函數中的所述跳轉指令的下一指令時,讀取所述寄存器中寫入的所述被調用函數的入口地址; 從所述入口地址開始執行所述被調用函數。6.如權利要求1所述的方法,其特征在于,所述在執行到應用程序中的調用函數時,獲取所述調用函數中的跳轉指令之前,還包括: 從應用程序中的調用函數的首地址開始確定跳轉指令,并將確定的跳轉指令記錄的地址配置為目標地址的偏移地址。7.一種在應用程序中的跳轉處理裝置,其特征在于,包括: 獲取模塊,用于在執行到應用程序中的調用函數時,獲取所述調用函數中的跳轉指令;所述跳轉指令用于指示目標地址,所述調用函數用于使所述應用程序從所述調用函數跳轉到所述目標地址所關聯的被調用函數; 確定模塊,用于根據所述跳轉指令中的目標地址確定被調用函數的入口地址; 執行模塊,用于根據確定的入口地址開始執行所述被調用函數。8.如權利要求7所述的裝置,其特征在于,所述跳轉指令中記錄的目標地址為內存中空閑空間的地址,所述空閑空間中設置有配置指令; 所述確定模塊,具體用于根據所述跳轉指令中的目標地址確定出內存中設置的配置指令;根據所述配置指令,得到被調用函數的入口地址。9.如權利要求8所述的裝置,其特征在于,所述空閑空間是指:在加載動態庫SO文件時,被SO文件占用的內存頁中沒有存儲數據的內存空間。10.如權利要求8或9所述的裝置,其特征在于,所述配置指令用于指示修改寄存器的值并將包括在該配置指令中的被調用函數的入口地址寫入到所述寄存器中。11.如權利要求10所述的裝置,其特征在于, 所述執行模塊具體用于在執行到調用函數中的所述跳轉指令的下一指令時,讀取所述寄存器中寫入的所述被調用函數的入口地址;從所述入口地址開始執行所述被調用函數。12.如權利要求7所述的裝置,其特征在于,還包括: 預置模塊,用于從應用程序中的調用函數的首地址開始確定跳轉指令,并將確定的跳轉指令記錄的地址配置為目標地址的偏移地址。13.一種智能終端,其特征在于,包括處理器; 所述處理器,用于在執行到應用程序中的調用函數時,獲取所述調用函數中的跳轉指令;所述跳轉指令用于指示目標地址,所述調用函數用于使所述應用程序從所述調用函數跳轉到所述目標地址所關聯的被調用函數;根據所述跳轉指令中的目標地址確定被調用函數的入口地址;根據確定的入口地址開始執行所述被調用函數。
【文檔編號】G06F9/44GK106095416SQ201610382640
【公開日】2016年11月9日
【申請日】2016年6月1日 公開號201610382640.2, CN 106095416 A, CN 106095416A, CN 201610382640, CN-A-106095416, CN106095416 A, CN106095416A, CN201610382640, CN201610382640.2
【發明人】彭畢雨, 王波, 王俊俊, 陳禮娟
【申請人】騰訊科技(深圳)有限公司