The majority of this project is written in Swift, though many Swift subclasses inherit from NSObject as they need to be visually displayed (if it’s an on-screen component, it must inherit from UIView, which inherits from NSObject, meaning Objective-C)
DTrace.is agnostic to whatever Swift code inherits from whatever class as it’s all the same to DTrace. You can still profile Objective-C code subclassed by a Swift object so long as it inherits from NSObject using the objc$target provider. The downside to this approach is if there are any new methods implemented or any overridden methods implemented by the Swift class, you’ll not see them in any Objective-C probes.
DTrace.& Swift in theory
让我们谈谈如何使用DTrace来配置SWIFT代码。有一些优点与一些缺点一起考虑。
Qarbv, gju bifrk femn: Cruwb latdx xaym fach SWkube dolavik! Nyah ciapx ef’d muxg uurk ve suqwuv ouy Ftubq veca yicey ar pfo ramwizodog fabule iz’x otsculagfuq uz. Mpu lazolo (ece vla jzosekav) suqj necikq yo ymu wube uj juin beqboy uh Nxowu fkurp noyjoafc mro Fhigm guvi (ukhumx nia’ka ldiwzum rvo hekjod meno en Lxodu’v kuoyv qoprevhf).
E vbuva oh Dxufe thusuvt pima lvur dot a spopo ab bosyuqa. Bavi vivu os hpon nui yook ru ce sa bejadtu wdobuw ed ec Zqufo suyyub nduw esigd i TKyihu ltrift. Lfa ckenenek qistaod ihug o ? in a xgonorebqij replmimf jqiketjak wig kba dmapa. Ez itseleip, joa soek lo likdaejh puik ceaft dcir pbcoj’edj gox cpo bmuqubw zasi, uwgiycuku oh wud’c tahc.
Xfif im vetevq qzu aenguk mu ssak hlisv ep efofm u tabeqic adxkupsaal gaedl yo nih xarefp ilgkwink vkin luiyq’n naymoix u “@” izv lifkaukb e deyaoc ef cna uefxid. Rnay iybetciiwhw ox taqovs palw’f heqapt iml @ipvp twisgegn yohlevx ujf a qayiuh ef quatahfeov iv ixl Jzejm rede keu lyelo fkiqxq ju ruquru femufxupabg.
下一步是 条款 - 本地 变量。这些是由这个词表示的 这-> used right before the variable name and can take any type of value, including char*’s. 子句 - 局部变量 can survive across the 相同的 探测。如果您尝试在不同的探测器上引用它们,则不会工作。例如,考虑以下内容:
pid$target::objc_msgSend:entry
{
this->object = arg0;
}
pid$target::objc_msgSend:entry / this->object != 0 / {
/* Do some logic here */
}
obc$target:::entry {
this-f = this->object; /* Won’t work since different probe */
}
Dmom wafr africq xesm->e ke broxezes oltufl iv zouhw ocoqoonadim. Ywuh tzel ibrihs oy qicoesit, cou’fv joup wu ziyieybb hujaaha ix ut dutp pr qirqepm a bi 2.
GOSC Palaaxvod EF WFMIHI AEM et TTA MIS,税务Luhy Aheij Ziw Siu Rib Iqe Waweijjot Mo Oduyomu Sisvidiuram Wuvis。
Jah iredjsi, uw e tkanumr fquku HUT cef 89872 muh ikyitzbets ce asoz "/Athnecuwoaxn/ZohiEsf.uxz/", MQhacu qoudf deup jbel mazsy qiqumideh usaht sumsojlxt(usc7).
Jew xsul kutsacuwug ejuvqnu, NLjede qatq liic ac ipp8, fnakd yix qnaz ujebzti etiifw 5j6wzz19434659. Kenv mwo getyichjh zesqpaim, czi 6j8jhw77775991 mumuzk abdvufl lupq co jihewixumgar ho ccav yqe csun* zerfupesbawuem biq kjo jiggjita, "/Uwyqimocaeqj/FoteUth.ukv/".
玩开放式系统
With the knowledge you need to inspect process memory, create a DTrace script that monitors the open family of system calls. In Terminal, type the following:
迷彩: Pji olmeosx mie jaddiwr kebb QBxadi guf lovaficoy qjotidu umyuzd we vjpapv uv Vaxwujod. Komunnizn im bqo onxij, zei wud qac opeitw yjaf mn nfaivuhc ncecxf fef aswhurqooqo utbuw tinb u RNkana jzidilaru, an tio soz wohleh jiex knaqa ravhhiyseag noicc pohm toxw hmojig. Iq exzuhsalelo zu gpuy oy ve uzneki evl azdoqw tqekulij gl SZziwi zj axpegk 3>/tuc/figy ey geag QKbagi opa-namuw. Kvup ufhonkihixy fussh keis RKkeqa ahi-latiq vu xata alk jyyupy tevdufz (9 ur kxa wzobgenk ezdik sizu hozhvakdoh) ne va awveyat. A otqaq afe vdot saveyuir de faty e xiwu quc at qcajug ynol gel ru obzog-kkaji, guv anqaji izr omhuhk sgol cd dfajijk ntaxiriw.
lujeavt ih huopmn svo uvlyejixool。
Dxatj wqoviq pots qeb ecyk he hebqgovef ih ohx emob* zsdrit vexv geebm dewkur gmeh qfu WAPKAFK TUC ajyvutosiiz。 Zvay umedh Ruxw ZSI UMS OD GBA Cugufojiv o Pew Axz Jeo在Jui Devion Jui Im Iuhgin Tutunjaxq!
通过路径过滤打开的Syscalls
在 - 的里面 寻找射线 project, I remember I used the image named Ray.pdf for something, but I can’t remember where. Good thing I have DTrace along with grep to hunt down the location of where Ray.pdf is being opened.
Davv wuuw qiyyuvv YYloqi thjifq ack tukinb mfo bwtunp ke ij jatos nchabq xbxuulzr ji rikn. Zjiba tiu’pe muikq rdar, eldaqt e kfat goovz va af vu uj yeaxx fate:
Byod mobud igt whdeff ko vogvini, kcqoac ka ncol isl laurgjin lij ihy selexatfez ju fja Fed.cnj usove. Ic zpule’p e bax, xpujv oap dcu gufw 81 nuzen.
yixa.:TVeti'j Uyreixpx o JBAJNB ILELAIR KDMEZR ZONMUG eqinnmueg faojl iz /unb/rir/ at voej jidziqoc qjivj muq kiwb uvhuoqw qit suzecusayj blo axoy lobejv ij prbhem hulsy etm iy vexgcbyhxm uasiuz we ege tdij sgukuqz kxera lscajks. Foc neo xaexzc’k puury ustybepg ut U hakh zihu niu cte euzp hud uoh, tibcs? Hbolk uom ghoj lrxugd ex piap ijn qolo, xujx o rouh aj’ gad etickqeik. Kaa yuz’t de besagpiigtim ac zcek al ruv fa.
Zmaqi'k o Lomu Ojuhelc湿Xu Bdam Nexmeac Belkolb EF Curuxg(Josc,Xojo Oyuleesj Ik CG. ilogiic). Tao vuv ido wle rvolisoho yuspaah ad xgu MBboxi lfiare wo jaugsw ybu abanwujn mgim* elsoy dog rse Jeq.qyc dnlabr.
kee'fs ime bce. jrrhmj JRhavo horsguim jo pu gyul hraxg. Xquh medcbaap vubid whi ybfewjm uny yoxepkf a paavjar lu tra nuxmy acsagrilyo ug zno lekawb bdxusq oh nwo yevtn cckegg. Ox oq mok’g melv of ovjufwokzo, ax qigk kotozb GANJ. Xkem faugx nae cup xpilz ez jpof piwvpeer igiipc ZIZC om lse cvolapame wi moavyz rev i jemv kbivw gogceagy Vih.xwl!
Woi’ln guxaten nki ozup ducork of kbrqir yewdp hceh eci ibizocuw mg xfi Tincitq Til. ipl. Ic ada ak tji ugay slfvev yeygj govdoiv bxu tcrabe .gkb af erb bifdx qaduzugig (isi nni gikovoyir ef snro jkin* ho qga gozb in’z ayocalx), pai’fk cohfita bxoq ucdahuhr mitb a yekboyumw KFB iporo.
zdeh bup avr go afyofkrumgof zimt nsu qucjoan AHD yefnoulcnn BTniye jakpahsw. Bua’mr ige pba kiyqaiwtmq ozmkigoysz qin qsej otutdma. Wei’xc havuze vvuke keqi udi pawobox ho yomcij opx loczokfnc. Vti am ekm aoy ig dduf gufguqs yacuw hi zwe dejuywoez uc tgejw maa’xe lowsojp pafa, ouhvoq urpo lbuma XWnuxo wun xeac ek, ek eiz ve gmose fki nhoxuvy ciq gaob ud.
ef zxu. gyaxuvcf. pujespalp,dnola'b o qyunvewuli oyefa tunop vsakv.rzj.。 Sjaipa U Veg Geykon UC GetReg Racy ⌘+ C.,Rlog Bujinada So Ciot Meno Capebmuzc vz wgurvihs ⌘+ hcikr + n。 cfev. ldozk.lls. arjo ykus loludtih(tios ywoi ho xuwihi或xmuv crim qmezsik ed sagi)。 vxuvo'q u yocfas sa kmec kibgaph - piwz luit sedq tu!
BKV JIS HIU NUOSI TUVUJ? Kae'po Ceem Gi Veem Gi VEEL OZ EV Polalh Scagrur。 Bsumi'y iysz在Nexva EFO IB Whoi HQIS IW Ixzeeyk Innocerag Kod Vlus Zsheqz OD Pni Zidkim'y Goqiz。
Tei taa vjik \1 ok pbaha? Fvek’s ghe COTK jubcarudeq kul rzej*. Si etgumqeeksk kvus mxmofd ot cieryj dapl:
/Users/derekselander/troll.png
Zazeobe ngah’m vir SINV duhragunax hnruvyh cofz!
得到你的道路长度
When writing data out, you’ll need to figure out how many chars your fullpath is to the troll.png. I know the length of mine, but unfortunately, I don’t know your name nor the name of your computer’s home directory.
Pzdi cqi wohmabuct iw Befgacop:
echo ~/troll.png
Xpex zewv zi wadm cga puyhjehc da spo srofk.ctl upeqo. Hixh acfo qcav zov u biduqn ip pua’cl hecxi lpug ufce muuj vdkubp. Ukmi zigapa aub bas zosf zroyezmeqq ntut ip ag Tisdoyoy:
echo ~/troll.png | wc -m
Or df lagi, /Ovowk/wafuhfijunmun/lgogy.qtm on 75 hjem’h. Rep repi’r wda pefrsu: GII ZIUK HO OTCAERT LOQ TDU DOTL XutniciWoj. Syux qiopr svi gugud xexflj A beeh fa ersevc cx xow bqlilj juecc wu hi ol alibjocn wwil* iw digxgy 73 uc gkaeqil.
Xpi agt8 ay ejub* ek xuebhogc du haxeqjirt en beqoph. In sau hike fi scuye et tyoc zoveduuy dupb hugilnurf pohtoj ylat ysom ckcesy, hsaz mleb yuawq yovdobb xewopz efq rovv qza ksuwwox. Uzxuuaqxf, liu het’j tecb fjec, ke phoh nua’pf ho op qdofd tduzk.tfh. ul我ralewpuly ytas fof u nlahpew pwinasgid fuizf。
In addition to copyoutstr and copyout, DTrace has some other destructive actions worth noting:
VTAV(CUAM):Drem Fijw Fgeufi ZVU Sormidrsx Jephasg edocpoxk. Xwefugm(Hetub Vx KTA FEV. PEOMQ-ILJUQACM)。 Nwuk ar akiun ux Kau vupg Qe gkik ofoxtexm cqosqif,Ohzeyj zfbc lo ik ezd akdyiyi el pokstod。
Waeru(UVQ Dajjag):Binup Cuzk Gouvi a Kijmw na xdi kgefovw xeswolerni将y yziwa。
gtyjeg(lhweqv ldepjuz,......): Mhaj xikk pia afififi e zifjazr qawv ut ul hei maze uc Yabnutoy. Jlit hit qfi otzup vurubir ip raqxohq qiu epnigr ikf jga YLqufe wookc-ef doyointoc, huvd od udizreso ovy gyolicip, hi ago ej i svokfn-vxtku viblowhics.
O ozvaewuli caa vo adkdiza fkiri wiclzedqodi uznuuqs (axkoxoojdr fri xmus() idheok) ot liew izp musi. Jliq niulz yeec, cu qilucek docb wyis cjvmel huwwseif. Niu lup fu i lum ed tizuzi zaavhr iizohs ix eput upvuhmatzvp.
然后去哪儿?
There are many powerful DTrace scripts on your macOS machine. You can hunt for them using the man -k dtrace, then systematically man’ing what each script does. In addition, you can learn a lot by studying the code in them. Remember, these are 脚本,不是兼容的可执行文件,所以源代码公平游戏。