[24220] 2015-08-23_为什么人人都该懂点LLVM

文档创建者:s7ckTeam
浏览次数:5
最后更新:2025-01-18
2015-08-23_为什么人人都该懂点LLVM L L V M   L i n u x   2 0 1 5 - 0 8 - 2 3 使 L L V M L L V M L L V M C C + + L L V M J I T C A p p   S t o r e L L V M L L V M I R L L V M L L V M L L V M J a v a H o t S p o t J i k e s L L V M L L V M 使 L L V M h a c k
P i n s e d 西 L L V M U I U C V i r t u a l   G h o s t U W C o r e D e t L L V M 线 使 L L V M 仿 L L V M L L V M L L V M L L V M P a s s C + + 使 C l a n g I R 使 L L V M 使 L L V M h a c k e r s L L V M L L V M L i n u x L L V M C l a n g 便 O S   X X C o d e L L V M C M a k e L L V M L L V M C l a n g C l a n g O S   X B r a n d o n   H o l t H o m e b r e w L L V M D o x y g e n L L V M A P I G o o g l e L L V M G o o g l e G o o g l e 使 L L V M L L V M L L V M A P I L L V M   I R   d u m p
L L V M v e c t o r m a p   L L V M   M a k e f i l e C M a k e 线 L L V M G i t H u b 便 使 L L V M L L V M G i t H u b l l v m - p a s s - s k e l e t o n L L V M f u n c t i o n   p a s s L L V M e r r s ( ) L L V M C + + f a l s e F t r u e C M a k e i s a c a s t d y n _ c a s t 1 .   $   g i t   c l o n e   g i t @ g i t h u b . c o m : s a m p s y o / l l v m - p a s s - s k e l e t o n . g i t s k e l e t o n / S k e l e t o n . c p p 1 .   v i r t u a l   b o o l   r u n O n F u n c t i o n ( F u n c t i o n   & F )   {   2 .       e r r s ( )   < <   " I   s a w   a   f u n c t i o n   c a l l e d   "   < <   F . g e t N a m e ( )   < <   " ! n " ; 3 .       r e t u r n   f a l s e ;   4 .   } 1 .   $   c d   l l v m - p a s s - s k e l e t o n  
L L V M , C M a k e   L L V M . 使 H o m e b r e w L L V M C f l a g C l a n g M a k e f i l e C F L A G S L L V M o p t h a c k h e l l o   w o r l d L L V M 使 L L V M M o d u l e F u n c t i o n B a s i c B l o c k I n s t r u c t i o n   2 .   $   m k d i r   b u i l d   3 .   $   c d   b u i l d   4 .   $   c m a k e   . .     #   G e n e r a t e   t h e   M a k e f i l e .   5 .   $   m a k e     #   A c t u a l l y   b u i l d   t h e   p a s s . L L V M _ D I R s h a r e / l l v m / c m a k e / 1 .   $   L L V M _ D I R = / u s r / l o c a l / o p t / l l v m / s h a r e / l l v m / c m a k e   c m a k e   . . b u i l d / s k e l e t o n / l i b S k e l e t o n P a s s . s o c l a n g 1 .   $   c l a n g   - X c l a n g   - l o a d   - X c l a n g   b u i l d / s k e l e t o n / l i b S k e l e t o n P a s s . *   s o m e t h i n g . c   2 .   I   s a w   a   f u n c t i o n   c a l l e d   m a i n ! - X c l a n g   - l o a d   - X c l a n g   p a t h / t o / l i b . s o c l a n g
L L V M 西 C + + f u n c t i o n m e t h o d L L V M R I S C L L V M C + + 5 L L V M 3 2 4 2 5 L L V M   I R R I S C L L V M C + + V a l u e 2 5 L L V M   I R 使 L L V M   I R 使 C l a n g I R L L V M I R 便 I R 1 .   % 5   =   a d d   i 3 2   % 4 ,   2 i 3 2 % 4 2 1 .   $   c l a n g   - e m i t - l l v m   - S   - o   -   s o m e t h i n g . c d u m p ( )
c o n t a i n e r s 使 C + +   1 1 f o r e a c h 便 L L V M   I R I R L L V M + -   m u t a t e 6 .   1 1 .   l l v m - p a s s - s k e l e t o n 1 .   e r r s ( )   < <   " F u n c t i o n   b o d y : n " ; 2 .   F . d u m p ( ) ;   3 .   f o r   ( a u t o &   B   :   F )   {   4 .       e r r s ( )   < <   " B a s i c   b l o c k : n " ; 5 .       B . d u m p ( ) ;   6 .       f o r   ( a u t o &   I   :   B )   {   7 .           e r r s ( )   < <   " I n s t r u c t i o n :   " ;   8 .           I . d u m p ( ) ;     9 .       }   1 0 .   } a u t o l l v m - p a s s - s k e l e t o n 1 .   f o r   ( a u t o &   B   :   F )   { 2 .       f o r   ( a u t o &   I   :   B )   { 3 .           i f   ( a u t o *   o p   =   d y n _ c a s t < B i n a r y O p e r a t o r > ( & I ) )   { 4 .               / /   I n s e r t   a t   t h e   p o i n t   w h e r e   t h e   i n s t r u c t i o n   ` o p `   a p p e a r s . 5 .               I R B u i l d e r < >   b u i l d e r ( o p ) ; 7 .               / /   M a k e   a   m u l t i p l y   w i t h   t h e   s a m e   o p e r a n d s   a s   ` o p ` . 8 .               V a l u e *   l h s   =   o p - > g e t O p e r a n d ( 0 ) ; 9 .               V a l u e *   r h s   =   o p - > g e t O p e r a n d ( 1 ) ; 1 0 .               V a l u e *   m u l   =   b u i l d e r . C r e a t e M u l ( l h s ,   r h s ) ; 1 2 .               / /   E v e r y w h e r e   t h e   o l d   i n s t r u c t i o n   w a s   u s e d   a s   a n   o p e r a n d ,   u s e   o u r 1 3 .               / /   n e w   m u l t i p l y   i n s t r u c t i o n   i n s t e a d . 1 4 .               f o r   ( a u t o &   U   :   o p - > u s e s ( ) )   {
1 8 .   L L V M 使 L L V M , 使 I R B u i l d e r 使 e x a m p l e . c 2 1 4 .               f o r   ( a u t o &   U   :   o p - > u s e s ( ) )   { 1 5 .                   U s e r *   u s e r   =   U . g e t U s e r ( ) ;     / /   A   U s e r   i s   a n y t h i n g   w i t h   o p e r a n d s . 1 6 .                   u s e r - > s e t O p e r a n d ( U . g e t O p e r a n d N o ( ) ,   m u l ) ; 1 7 .               } 1 9 .               / /   W e   m o d i f i e d   t h e   c o d e . 2 0 .               r e t u r n   t r u e ; 2 1 .           } 2 2 .       } 2 3 .   } d y n _ c a s t < T > ( p ) I 1 .   # i n c l u d e   < s t d i o . h > 2 .   i n t   m a i n ( i n t   a r g c ,   c o n s t   c h a r * *   a r g v )   { 3 .           i n t   n u m ; 4 .           s c a n f ( " % i " ,   & n u m ) ; 5 .           p r i n t f ( " % i n " ,   n u m   +   2 ) ; 6 .           r e t u r n   0 ; 7 .   } 1 .   $   c c   e x a m p l e . c 2 .   $   . / a . o u t 3 .   1 0 4 .   1 2 5 .   $   c l a n g   - X c l a n g   - l o a d   - X c l a n g   b u i l d / s k e l e t o n / l i b S k e l e t o n P a s s . s o   e x a m p l e . c 6 .   $   . / a . o u t 7 .   1 0 8 .   2 0
I R B u i l d e r L L V M C L L V M r t l i b 6 .   1 3 .   1 7 .   M o d u l e : : g e t O r I n s e r t F u n c t i o n I R B u i l d e r : : C r e a t e C a l l C r t l i b . c l l v m - p a s s - s k e l e t o n 1 .   / /   G e t   t h e   f u n c t i o n   t o   c a l l   f r o m   o u r   r u n t i m e   l i b r a r y . 2 .   L L V M C o n t e x t &   C t x   =   F . g e t C o n t e x t ( ) ; 3 .   C o n s t a n t *   l o g F u n c   =   F . g e t P a r e n t ( ) - > g e t O r I n s e r t F u n c t i o n ( 4 .       " l o g o p " ,   T y p e : : g e t V o i d T y ( C t x ) ,   T y p e : : g e t I n t 3 2 T y ( C t x ) ,   N U L L 5 .   ) ; 7 .   f o r   ( a u t o &   B   :   F )   { 8 .       f o r   ( a u t o &   I   :   B )   { 9 .           i f   ( a u t o *   o p   =   d y n _ c a s t < B i n a r y O p e r a t o r > ( & I ) )   { 1 0 .               / /   I n s e r t   * a f t e r *   ` o p ` . 1 1 .               I R B u i l d e r < >   b u i l d e r ( o p ) ; 1 2 .               b u i l d e r . S e t I n s e r t P o i n t ( & B ,   + + b u i l d e r . G e t I n s e r t P o i n t ( ) ) ; 1 4 .               / /   I n s e r t   a   c a l l   t o   o u r   f u n c t i o n . 1 5 .               V a l u e *   a r g s [ ]   =   { o p } ; 1 6 .               b u i l d e r . C r e a t e C a l l ( l o g F u n c ,   a r g s ) ; 1 8 .               r e t u r n   t r u e ; 1 9 .           } 2 0 .       } 2 1 .   } l o g o p v o i d   l o g o p ( i n t   i ) ; l o g o p 1 .   # i n c l u d e   < s t d i o . h > 2 .   v o i d   l o g o p ( i n t   i )   { 3 .       p r i n t f ( " c o m p u t e d :   % i n " ,   i ) ;
l l v m - l i n k I R l d A n n o t a t i o n a n n o t a t i o n s L L V M 使 C a l l I n s t C l a n g B r a n d o n   H o l t C l a n g 使 Q u a l a C l a n g J a v a J S R - 3 0 8 L L V M 使 L L V M h a c k d e b u g   i n f o I R [ C l a n g ] ( h t t p : / / c l a n g . l l v m . o r g / d o c s / C l a n g P l u g i n s . h t m l ) 4 .   } 1 .   $   c c   - c   r t l i b . c 2 .   $   c l a n g   - X c l a n g   - l o a d   - X c l a n g   b u i l d / s k e l e t o n / l i b S k e l e t o n P a s s . s o   - c   e x a m p l e . c 3 .   $   c c   e x a m p l e . o   r t l i b . o 4 .   $   . / a . o u t 5 .   1 2 6 .   c o m p u t e d :   1 4 7 .   1 4 _ _ e n a b l e _ i n s t r u m e n t a t i o n ( ) _ _ d i s a b l e _ i n s t r u m e n t a t i o n ( ) _ _ a t t r i b u t e _ _ ( ( a n n o t a t e ( " f o o " ) ) ) _ _ b u i l t i n _ a n n o t a t i o n ( e ,   " f o o " )
h t t p : / / a d r i a n s a m p s o n . n e t / b l o g / l l v m . h t m l   A d r i a n   S a m p s o n h t t p : / / g e e k . c s d n . n e t / n e w s / d e t a i l / 3 7 7 8 5   U W E m e r y   B e r g e r P i n B r a n d o n   H o l t L L V M   d e b u g   G r a p h V i z J o h n   R e g e h r L L V M A P I L L V M A l e x   B r a d b u r y L L V M L L V M
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则