Nothing Special   »   [go: up one dir, main page]

skip to main content
10.1145/3611643.3616279acmconferencesArticle/Chapter ViewAbstractPublication PagesfseConference Proceedingsconference-collections
research-article

Scalable Program Clone Search through Spectral Analysis

Published: 30 November 2023 Publication History

Abstract

We consider the problem of program clone search, i.e. given a target program and a repository of known programs (all in executable format), the goal is to find the program in the repository most similar to the target program -- with potential applications in terms of reverse engineering, program clustering, malware lineage and software theft detection. Recent years have witnessed a blooming in code similarity techniques, yet most of them focus on function-level similarity and function clone search, while we are interested in program-level similarity and program clone search. Actually, our study shows that prior similarity approaches are either too slow to handle large program repositories, or not precise enough, or yet not robust against slight variations introduced by compilers, source code versions or light obfuscations. We propose a novel spectral analysis method for program-level similarity and program clone search called Programs Spectral Similarity (PSS). In a nutshell, PSS one-time spectral feature extraction is tailored for large repositories, making it a perfect fit for program clone search. We have compared the different approaches with extensive benchmarks, showing that PSS reaches a sweet spot in terms of precision, speed and robustness.

Supplementary Material

Video (fse23main-p317-p-video.mp4)
"Executable unit tests are a key component of many software engineering methodologies. A “green” test is one that is reported as passing (successfully testing some software feature). However, it is common for a test harness to assume that a test has passed when, in fact, it has merely not reported a failure. In this gap, where the “excluded middle” lives and thrives, we find the Rotten Green Test: A test that looks like it does something useful, but in fact does not. <b> Google Test, a popular open-source test framework for C++ software, has been enhanced to detect rotten green tests. This enhancement follows the lead of similar work done for the Pharo language, but in a framework more applicable in industry, and with no requirement for test modifications or an external tool. The enhanced Google Test has detected 183 rotten assertions in the LLVM project’s unit tests, and even found one in Google Test’s own internal test suite. The enhancement may report false positives from parameterized tests where assertions are conditioned on the parameter, and currently does not detect rotten assertions in helper methods."

References

[1]
Hadj Ahmed Bay Ahmed, Abdel-Ouahab Boudraa, and Delphine Dare-Emzivat. 2019. A Joint Spectral Similarity Measure for Graphs Classification. Pattern Recognition Letters, https://doi.org/10.1016/j.patrec.2018.12.014
[2]
Blake Anderson, Daniel Quist, Joshua Neil, Curtis Storlie, and Terran Lane. 2011. Graph-based malware detection using dynamic analysis. Journal in Computer Virology, https://doi.org/10.1007/s11416-011-0152-x
[3]
Michael Backes, Sven Bugiel, and Erik Derr. 2016. Reliable Third-Party Library Detection in Android and Its Security Applications. In Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. Association for Computing Machinery, New York, NY, USA. https://doi.org/10.1145/2976749.2978333
[4]
Jinrong Bai, Qibin Shi, and Shiguang Mu. 2019. A Malware and Variant Detection Method Using Function Call Graph Isomorphism. Security and Communication Networks, https://doi.org/10.1155/2019/1043794
[5]
Yunsheng Bai, Hao Ding, Song Bian, Ting Chen, Yizhou Sun, and Wei Wang. 2019. SimGNN: A Neural Network Approach to Fast Graph Similarity Computation. In Proceedings of the 12th ACM International Conference on Web Search and Data Mining. https://doi.org/10.1145/3289600.3290967
[6]
Sebastian Banescu, Christian Collberg, Vijay Ganesh, Zack Newsham, and Alexander Pretschner. 2016. Code Obfuscation against Symbolic Execution Attacks. In Proceedings of the 32nd Annual Conference on Computer Security Applications. https://doi.org/10.1145/2991079.2991114
[7]
Ira Baxter, Andrew Yahin, Leonardo de Moura, Marcelo Sant’Anna, and Lorraine Bier. 1998. Clone Detection Using Abstract Syntax Trees. Proc. of International Conference on Software Maintenance, 368-377, 368–377. https://doi.org/10.1109/ICSM.1998.738528
[8]
Stefan Bellon, Rainer Koschke, Giulio Antoniol, Jens Krinke, and Ettore Merlo. 2007. Comparison and Evaluation of Clone Detection Tools. IEEE Transactions on Software Engineering, https://doi.org/10.1109/TSE.2007.70725
[9]
Tristan Benoit. 2023. Artifacts - Scalable Program Clone Search through Spectral Analysis. https://doi.org/10.5281/zenodo.8289599
[10]
Martial Bourquin, Andy King, and Edward Robbins. 2013. BinSlayer: Accurate Comparison of Binary Executables. In Proceedings of the 2nd ACM SIGPLAN Program Protection and Reverse Engineering Workshop. https://doi.org/10.1145/2430553.2430557
[11]
Danilo Bruschi, Lorenzo Martignoni, and Mattia Monga. 2006. Detecting Self-mutating Malware Using Control-Flow Graph Matching. In International Conference on Detection of Intrusions and Malware, and Vulnerability Assessment. https://doi.org/10.1007/11790754_8
[12]
Mahinthan Chandramohan, Yinxing Xue, Zhengzi Xu, Yang Liu, Chia Yuan Cho, and Hee Beng Kuan Tan. 2016. BinGo: Cross-Architecture Cross-OS Binary Search. In Proceedings of the 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering. https://doi.org/10.1145/2950290.2950350
[13]
Binlin Cheng, Jiang Ming, Erika A Leal, Haotian Zhang, Jianming Fu, Guojun Peng, and Jean-Yves Marion. 2021. Obfuscation-Resilient Executable Payload Extraction From Packed Malware. In USENIX Security Symposium.
[14]
Fan Chung. 1997. Spectral graph theory. American Mathematical Society.
[15]
Brian Crawford, Ralucca Gera, Jeffrey House, Thomas Knuth, and Ryan Miller. 2016. Graph Structure Similarity using Spectral Graph Theory. International Workshop on Complex Networks and their Applications, https://doi.org/10.1007/978-3-319-50901-3_17
[16]
Yaniv David, Nimrod Partush, and Eran Yahav. 2018. FirmUp: Precise Static Detection of Common Vulnerabilities in Firmware. In Proceedings of the 23th International Conference on Architectural Support for Programming Languages and Operating Systems. https://doi.org/10.1145/3296957.3177157
[17]
Yaniv David and Eran Yahav. 2014. Tracelet-Based Code Search in Executables. In Proceedings of the 35th ACM SIGPLAN Conference on Programming Language Design and Implementation. https://doi.org/10.1145/2594291.2594343
[18]
Prasad Deshpande and Mark Stamp. 2016. Metamorphic Malware Detection Using Function Call Graph Analysis. MIS Review, https://doi.org/10.31979/etd.t9xm-ahsc
[19]
Steven H. H. Ding, Benjamin C. M. Fung, and Philippe Charland. 2019. Asm2Vec: Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization. IEEE Symposium on Security and Privacy, https://doi.org/10.1109/SP.2019.00003
[20]
Ruian Duan, Ashish Bijlani, Meng Xu, Taesoo Kim, and Wenke Lee. 2017. Identifying Open-Source License Violation and 1-day Security Risk at Large Scale. ACM SIGSAC Conference on Computer and Communications Security, https://doi.org/10.1145/3133956.3134048
[21]
Yue Duan, Xuezixiang Li, Jinghan Wang, and Heng Yin. 2020. DeepBinDiff: Learning Program-Wide Code Representations for Binary Diffing. In 27th Network and Distributed System Security Symposium. https://doi.org/10.14722/ndss.2020.24311
[22]
Thomas Dullien. 2004. Structural Comparison of Executable Objects. Workshop on Detection of Intrusions and Malware & Vulnerability Assessment.
[23]
Thomas Dullien and Rolf Rolles. 2005. Graph-based comparison of Executable Objects. SSTIC.
[24]
Sebastian Eschweiler, Khaled Yakdan, and Elmar Gerhards-Padilla. 2016. discovRE: Efficient Cross-Architecture Identification of Bugs in Binary Code. In NDSS. https://doi.org/10.14722/NDSS.2016.23185
[25]
Qian Feng, Rundong Zhou, Chengcheng Xu, Yao Cheng, Brian Testa, and Heng Yin. 2016. Scalable Graph-Based Bug Search for Firmware Images. In Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. https://doi.org/10.1145/2976749.2978370
[26]
Aasa Feragen, Niklas Kasenburg, Jens Petersen, Marleen de Bruijne, and Karsten Borgwardt. 2013. Scalable kernels for graphs with continuous attributes. 26th International Conference on Neural Information Processing Systems, https://doi.org/10.5555/2999611.2999636
[27]
Marc Fyrbiak, Sebastian Wallat, Sascha Reinhard, Nicolai Bissantz, and Christof Paar. 2020. Graph Similarity and its Applications to Hardware Security. IEEE Trans. Comput., https://doi.org/10.1109/TC.2019.2953752
[28]
Debin Gao, Michael K. Reiter, and Dawn Song. 2008. BinHunt: Automatically Finding Semantic Differences in Binary Programs. In Proceedings on International Conference on Information and Communications Security. https://doi.org/10.1007/978-3-540-88625-9_16
[29]
Xinbo Gao, Bing Xiao, Dacheng Tao, and Xuelong Li. 2010. A survey of graph edit distance. Pattern Analysis and Applications, https://doi.org/10.1007/s10044-008-0141-y
[30]
Ruiqi Guo, Philip Sun, Erik Lindgren, Quan Geng, David Simcha, Felix Chern, and Sanjiv Kumar. 2020. Accelerating Large-Scale Inference with Anisotropic Vector Quantization. In International Conference on Machine Learning. https://doi.org/10.5555/3524938.3525302
[31]
Irfan Ul Haq and Juan Caballero. 2021. A Survey of Binary Code Similarity. ACM Computing Surveys (CSUR), https://doi.org/10.1145/3446371
[32]
Armijn Hemel, Karl Trygve Kalleberg, Rob Vermaas, and Eelco Dolstra. 2011. Finding Software License Violations through Binary Code Clone Detection. In Proceedings of the 8th Working Conference on Mining Software Repositories. https://doi.org/10.1145/1985441.1985453
[33]
Xin Hu, Sandeep Bhatkar, Kent Griffin, and Kang G. Shin. 2013. MutantX-S: Scalable Malware Clustering Based on Static Features. In Proceedings of the 2013 USENIX Conference on Annual Technical Conference. https://doi.org/10.5555/2535461.2535485
[34]
Xin Hu, Tzi cker Chiueh, and Kang G. Shin. 2009. Large-scale malware indexing using function-call graphs. In Proceedings of the ACM Conference on Computer and Communications Security. https://doi.org/10.1145/1653662.1653736
[35]
Yikun Hu, Yuanyuan Zhang, Juanru Li, and Dawu Gu. 2017. Binary Code Clone Detection across Architectures and Compiling Configurations. In IEEE/ACM 25th International Conference on Program Comprehension (ICPC). https://doi.org/10.1109/ICPC.2017.22
[36]
Jianjun Huang, Bo Xue, Jiasheng Jiang, Wei You, Bin Liang, Jingzheng Wu, and Yanjun Wu. 2022. Scalably Detecting Third-Party Android Libraries With Two-Stage Bloom Filtering. IEEE Transactions on Software Engineering, 1–14. https://doi.org/10.1109/TSE.2022.3215628
[37]
Jiyong Jang, Abeer Agrawal, and David Brumley. 2012. ReDeBug: Finding Unpatched Code Clones in Entire OS Distributions. In 2012 IEEE Symposium on Security and Privacy. https://doi.org/10.1109/SP.2012.13
[38]
Jiyong Jang, Maverick Woo, and David Brumley. 2013. Towards Automatic Software Lineage Inference. In Proceedings of the 22nd USENIX Conference on Security. https://doi.org/10.5555/2534766.2534774
[39]
Irena Jovanović and Zoran Stanić. 2012. Spectral distances of graphs. Linear Algebra Appl., https://doi.org/10.1016/j.laa.2011.08.019
[40]
Pascal Junod, Julien Rinaldini, Johan Wehrli, and Julie Michielin. 2015. Obfuscator-LLVM – Software Protection for the Masses. In Proceedings of the IEEE/ACM 1st International Workshop on Software Protection, SPRO’15. https://doi.org/10.1109/SPRO.2015.10
[41]
Boojoong Kang, Taekeun Kim, Heejun Kwon, Yangseo Choi, and Eul Gyu Im. 2012. Malware Classification Method via Binary Content Comparison. In Proceedings of the 2012 ACM Research in Applied Computation Symposium. https://doi.org/10.1145/2401603.2401672
[42]
Wei Ming Khoo, Alan Mycroft, and Ross Anderson. 2013. Rendezvous: A search engine for binary code. In 10th Working Conference on Mining Software Repositories (MSR). https://doi.org/10.1109/MSR.2013.6624046
[43]
Dongkwan Kim, Eunsoo Kim, Sang Kil Cha, Sooel Son, and Yongdae Kim. 2022. Revisiting Binary Code Similarity Analysis using Interpretable Feature Engineering and Lessons Learned. IEEE Transactions on Software Engineering, 1–23. https://doi.org/10.1109/TSE.2022.3187689
[44]
Orestis Kostakis, Joris Kinable, Hamed Mahmoudi, and Kimmo Mustonen. 2011. Improved call graph comparison using simulated annealing. In Proceedings of the ACM Symposium on Applied Computing. https://doi.org/10.1145/1982185.1982509
[45]
Nils M. Kriege, Pierre-Louis Giscard, and Richard C. Wilson. 2016. On Valid Optimal Assignment Kernels and Applications to Graph Classification. In 30th International Conference on Neural Information Processing Systems. https://doi.org/10.5555/3157096.3157278
[46]
Christopher Kruegel, Engin Kirda, Darren Mutz, William Robertson, and Giovanni Vigna. 2006. Polymorphic worm detection using structural information of executables. International Workshop on Recent Advances in Intrusion Detection, https://doi.org/10.1007/11663812_11
[47]
Arun Lakhotia, Mila Dalla Preda, and Roberto Giacobazzi. 2013. Fast Location of Similar Code Fragments Using Semantic ’Juice’. In Proceedings of the 2nd ACM SIGPLAN Program Protection and Reverse Engineering Workshop. https://doi.org/10.1145/2430553.2430558
[48]
Yeo Reum Lee, BooJoong Kang, and Eul Gyu Im. 2013. Function Matching-Based Binary-Level Software Similarity Calculation. In Proceedings of the 2013 Research in Adaptive and Convergent Systems. https://doi.org/10.1145/2513228.2513300
[49]
R. B. Lehoucq, D. C. Sorensen, and C. Yang. 1998. ARPACK Users’ Guide. Society for Industrial and Applied Mathematics. https://doi.org/10.1137/1.9780898719628
[50]
Yujia Li, Chenjie Gu, Thomas Dullien, Oriol Vinyals, and Pushmeet Kohli. 2019. Graph matching networks for learning the similarity of graph structured objects. In 36th International conference on machine learning.
[51]
Martina Lindorfer, Alessandro Di Federico, Federico Maggi, Paolo Milani Comparetti, and Stefano Zanero. 2012. Lines of Malicious Code: Insights into the Malicious Software Industry. In Proceedings of the 28th Annual Computer Security Applications Conference. https://doi.org/10.1145/2420950.2421001
[52]
Bingchang Liu, Wei Huo, Chao Zhang, Wenchao Li, Feng Li, Aihua Piao, and Wei Zou. 2018. α Diff: Cross-Version Binary Code Similarity Detection with DNN. In 33rd IEEE/ACM International Conference on Automated Software Engineering. https://doi.org/10.1145/3238147.3238199
[53]
Lannan Luo, Jiang Ming, Dinghao Wu, Peng Liu, and Sencun Zhu. 2017. Semantics-Based Obfuscation-Resilient Binary Code Similarity Comparison with Applications to Software and Algorithm Plagiarism Detection. IEEE Transactions on Software Engineering, https://doi.org/10.1109/TSE.2017.2655046
[54]
Andrea Marcelli, Mariano Graziano, Xabier Ugarte-Pedrero, and Yanick Fratantonio. 2022. How Machine Learning Is Solving the Binary Function Similarity Problem. In 31st USENIX Security Symposium (USENIX Security 22).
[55]
Luca Massarelli, Giuseppe Antonio Di Luna, Fabio Petroni, Leonardo Querzoni, and Roberto Baldoni. 2021. Function Representations for Binary Similarity. IEEE Transactions on Dependable and Secure Computing, https://doi.org/10.1109/TDSC.2021.3051852
[56]
Jiang Ming, Dongpeng Xu, Yufei Jiang, and Dinghao Wu. 2017. BinSim: Trace-based Semantic Binary Diffing via System Call Sliced Segment Equivalence Checking. In USENIX Security Symposium. https://doi.org/10.5555/3241189.3241211
[57]
Jiang Ming, Dongpeng Xu, and Dinghao Wu. 2015. Memoized Semantics-Based Binary Diffing with Application to Malware Lineage Inference. In IFIP Advances in Information and Communication Technology. https://doi.org/10.1007/978-3-319-18467-8_28
[58]
Beng Heng Ng and Atul Prakash. 2013. Expose: Discovering Potential Binary Code Re-use. In 37th IEEE Annual Computer Software and Applications Conference. https://doi.org/10.1109/COMPSAC.2013.83
[59]
Giannis Nikolentzos, Polykarpos Meladianos, Stratis Limnios, and Michalis Vazirgiannis. 2018. A Degeneracy Framework for Graph Similarity. In Proceedings of the 27th International Joint Conference on Artificial Intelligence, IJCAI-18. https://doi.org/10.5555/3304889.3305021
[60]
Irving Ojalvo and Miya Newman. 1970. Vibration modes of large structures by an automatic matrix-reduction method. Aiaa Journal - AIAA J, https://doi.org/10.2514/3.5878
[61]
Mathilde Ollivier, Sébastien Bardin, Richard Bonichon, and Jean-Yves Marion. 2019. How to Kill Symbolic Deobfuscation for Free (or: Unleashing the Potential of Path-Oriented Protections). In Proceedings of the 35th Annual Computer Security Applications Conference. https://doi.org/10.1145/3359789.3359812
[62]
Chengbin Pang, Ruotong Yu, Yaohui Chen, Eric Koskinen, Georgios Portokalidis, Bing Mao, and Jun Xu. 2021. Sok: All you ever wanted to know about x86/x64 binary disassembly but were afraid to ask. In 2021 IEEE Symposium on Security and Privacy (SP). https://doi.org/10.1109/SP40001.2021.00012
[63]
Jannik Pewny, Behrad Garmany, Robert Gawlik, Christian Rossow, and Thorsten Holz. 2015. Cross-Architecture Bug Search in Binary Executables. In IEEE Symposium on Security and Privacy. https://doi.org/10.1109/SP.2015.49
[64]
Jannik Pewny, Felix Schuster, Lukas Bernhard, Thorsten Holz, and Christian Rossow. 2014. Leveraging Semantic Signatures for Bug Search in Binary Programs. In Proceedings of the 30th Annual Computer Security Applications Conference. https://doi.org/10.1145/2664243.2664269
[65]
Pau Riba, Andreas Fischer, Josep Lladós, and Alicia Fornés. 2021. Learning graph edit distance by graph neural networks. Pattern Recognition, https://doi.org/10.1016/j.patcog.2021.108132
[66]
Alberto Sanfeliu and King-Sun Fu. 1983. A distance measure between attributed relational graphs for pattern recognition. IEEE Transactions on Systems, Man, and Cybernetics, https://doi.org/10.1109/TSMC.1983.6313167
[67]
Igor Santos, Felix Brezo, Javier Nieves, Yoseba K. Penya, Borja Sanz, Carlos Laorden, and Pablo G. Bringas. 2010. Idea: Opcode-Sequence-Based Malware Detection. In Engineering Secure Software and Systems, Fabio Massacci, Dan Wallach, and Nicola Zannone (Eds.). https://doi.org/10.1007/978-3-642-11747-3_3
[68]
Francesc Serratosa. 2014. Fast computation of Bipartite graph matching. Pattern Recognition Letters, https://doi.org/10.1016/j.patrec.2014.04.015
[69]
W. Tang, P. Luo, J. Fu, and D. Zhang. 2020. LibDX: A Cross-Platform and Accurate System to Detect Third-Party Libraries in Binary Code. In 2020 IEEE 27th International Conference on Software Analysis, Evolution and Reengineering (SANER). IEEE Computer Society, 104–115. issn:1534-5351 https://doi.org/10.1109/SANER48275.2020.9054845
[70]
Wei Tang, Yanlin Wang, Hongyu Zhang, Shi Han, Ping Luo, and Dongmei Zhang. 2022. LibDB: An Effective and Efficient Framework for Detecting Third-Party Libraries in Binaries. In Proceedings of the 19th International Conference on Mining Software Repositories. Association for Computing Machinery, New York, NY, USA. https://doi.org/10.1145/3524842.3528442
[71]
Vijay Walunj, Gharib Gharibi, Duy H. Ho, and Yugyung Lee. 2019. GraphEvo: Characterizing and Understanding Software Evolution using Call Graphs. In 2019 IEEE International Conference on Big Data (Big Data). https://doi.org/10.1109/BigData47090.2019.9005560
[72]
Richard C. Wilson and Ping Zhu. 2008. A study of graph spectra for comparing graphs and trees. Pattern Recognition, https://doi.org/10.1016/j.patcog.2008.03.011
[73]
Ming Xu, Lingfei Wu, Shuhui Qi, Jian Xu, Haiping Zhang, Yizhi Ren, and Ning Zheng. 2013. A similarity metric method of obfuscated malware using function-call graph. Journal of Computer Virology and Hacking Techniques, https://doi.org/10.1007/s11416-012-0175-y
[74]
Xiaojun Xu, Chang Liu, Qian Feng, Heng Yin, Le Song, and Dawn Song. 2017. Neural Network-based Graph Embedding for Cross-Platform Binary Code Similarity Detection. In Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security. https://doi.org/10.1145/3133956.3134018
[75]
Zhengzi Xu, Bihuan Chen, Mahinthan Chandramohan, Yang Liu, and Fu Song. 2017. SPAIN: Security Patch Analysis for Binaries towards Understanding the Pain and Pills. In IEEE/ACM 39th International Conference on Software Engineering (ICSE). https://doi.org/10.1109/ICSE.2017.49
[76]
Fabian Yamaguchi, Markus Lottmann, and Konrad Rieck. 2012. Generalized Vulnerability Extrapolation Using Abstract Syntax Trees. In Proceedings of the 28th Annual Computer Security Applications Conference. https://doi.org/10.1145/2420950.2421003
[77]
Jia Yang, Cai Fu, Xiao-Yang Liu, Heng Yin, and Pan Zhou. 2021. Codee: A Tensor Embedding Scheme for Binary Code Search. IEEE Transactions on Software Engineering, https://doi.org/10.1109/TSE.2021.3056139

Cited By

View all

Recommendations

Comments

Please enable JavaScript to view thecomments powered by Disqus.

Information & Contributors

Information

Published In

cover image ACM Conferences
ESEC/FSE 2023: Proceedings of the 31st ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering
November 2023
2215 pages
ISBN:9798400703270
DOI:10.1145/3611643
Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than the author(s) must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected].

Sponsors

Publisher

Association for Computing Machinery

New York, NY, United States

Publication History

Published: 30 November 2023

Permissions

Request permissions for this article.

Check for updates

Badges

Author Tags

  1. binary code analysis
  2. clone search
  3. spectral analysis

Qualifiers

  • Research-article

Funding Sources

  • ANR
  • EU Horizon 2020

Conference

ESEC/FSE '23
Sponsor:

Acceptance Rates

Overall Acceptance Rate 112 of 543 submissions, 21%

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • 0
    Total Citations
  • 135
    Total Downloads
  • Downloads (Last 12 months)134
  • Downloads (Last 6 weeks)4
Reflects downloads up to 27 Dec 2024

Other Metrics

Citations

Cited By

View all

View Options

Login options

View options

PDF

View or Download as a PDF file.

PDF

eReader

View online with eReader.

eReader

Media

Figures

Other

Tables

Share

Share

Share this Publication link

Share on social media