Nagarajan Kandasamy

126 papers A* 4A 12B 13C 6Misc 5Journal 50Unranked 35
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Abhishek Kumar Mishra, Arya Somasundaram, Anup Das, Nagarajan Kandasamy
2026 A* conf
AAAI
Anush Niranjan Lingamoorthy, Abhishek Kumar Mishra, Olumuyiwa Oni, Jacob S. Brenner, Nagarajan Kandasamy, Amanda Watson
2025 conf
DFT
Mohammad Ershad Shaik, Abhishek Kumar Mishra, Nagarajan Kandasamy, Nur A. Touba
2025 conf
ACM Great Lakes Symposium on VLSI
Yilmaz Ege Gonul, Ceyhun Efe Kayan, Ilknur Mustafazade, Nagarajan Kandasamy, Baris Taskin
2025 J jnl
CoRR
Yilmaz Ege Gonul, Ceyhun Efe Kayan, Ilknur Mustafazade, Nagarajan Kandasamy, Baris Taskin
2025 A conf
DSN
Suman Kumar, Abhishek Kumar Mishra, Anup Das, Nagarajan Kandasamy
2025 J jnl
CoRR
Aref Ghoreishee, Abhishek Kumar Mishra, John Walsh, Anup Das, Nagarajan Kandasamy
2025 J jnl
CoRR
Aref Ghoreishee, Abhishek Kumar Mishra, Lifeng Zhou, John Walsh, Nagarajan Kandasamy
2024 conf
MWSCAS
Shadi Matinizadeh, Arghavan Mohammadhassani, Noah Pacik-Nelson, Ioannis Polykretis, Abhishek Kumar Mishra, James A. Shackleford, Nagarajan Kandasamy, Eric M. Gallo, Anup Das
2024 J jnl
CoRR
Shadi Matinizadeh, Noah Pacik-Nelson, Ioannis Polykretis, Krupa Tishbi, Suman Kumar, M. Lakshmi Varshika, Arghavan Mohammadhassani, Abhishek Kumar Mishra, Nagarajan Kandasamy, James A. Shackleford, Eric M. Gallo, Anup Das
2024 J jnl
IEEE Embed. Syst. Lett.
Phu Khanh Huynh, Ilknur Mustafazade, Francky Catthoor, Nagarajan Kandasamy, Anup Das
2024 conf
CF
Ilknur Mustafazade, Nagarajan Kandasamy, Anup Das
2024 B conf
IJCNN
Ankita Paul, Nagarajan Kandasamy, Kapil R. Dandekar, Anup Das
2024 A* conf
IJCAI
Anush Niranjan Lingamoorthy, Abhishek Kumar Mishra, Suman Kumar, David Gordon, Jacob S. Brenner, Nagarajan Kandasamy, Amanda Watson
2024 C conf
PRDC
Ilknur Mustafazade, Anup Das, Nagarajan Kandasamy
2024 J jnl
CoRR
Keyur D. Shah, James A. Shackleford, Nagarajan Kandasamy, Gregory C. Sharp
2024 C conf
PRDC
Abhishek Kumar Mishra, Anup Das, Nagarajan Kandasamy
2024 conf
ICONS
Shadi Matinizadeh, Arghavan Mohammadhassani, Noah Pacik-Nelson, Ioannis Polykretis, Krupa Tishbi, Suman Kumar, M. Lakshmi Varshika, Abhishek Kumar Mishra, Nagarajan Kandasamy, James A. Shackleford, Eric M. Gallo, Anup Das
2024 conf
IEEECONF
Shadi Matinizadeh, Arghavan Mohammadhassani, M. Lakshmi Varshika, Sarah Johari, Nagarajan Kandasamy, Anup Das
2024 A conf
ITC
Abhishek Kumar Mishra, Suman Kumar, Anush Niranjan Lingamoorthy, Anup Das, Nagarajan Kandasamy
2024 J jnl
CoRR
Abhishek Kumar Mishra, Suman Kumar, Anush Niranjan Lingamoorthy, Anup Das, Nagarajan Kandasamy
2024 Misc conf
VTS
Abhishek Kumar Mishra, Mohammad Ershad Shaik, Anush Niranjan Lingamoorthy, Suman Kumar, Anup Das, Nagarajan Kandasamy, Nur A. Touba
2023 B conf
CHASE
Anush Niranjan Lingamoorthy, Amanda Watson, Korey Henderson, Ayan Mandal, David Gordon, Xiaonan Ma, James Weimer, Nagarajan Kandasamy, Jacob S. Brenner
2023 conf
ASP-DAC
M. Lakshmi Varshika, Abhishek Kumar Mishra, Nagarajan Kandasamy, Anup Das
2023 B conf
ETS
Abhishek Kumar Mishra, Anup Das, Nagarajan Kandasamy
2022 J jnl
ACM Trans. Embed. Comput. Syst.
Shihao Song, Harry Chong, Adarsha Balaji, Anup Das, James A. Shackleford, Nagarajan Kandasamy
2022 J jnl
ACM Trans. Embed. Comput. Syst.
Shihao Song, Adarsha Balaji, Anup Das, Nagarajan Kandasamy
2022 J jnl
CoRR
Shihao Song, Adarsha Balaji, Anup Das, Nagarajan Kandasamy
2022 J jnl
IEEE Trans. Parallel Distributed Syst.
Twisha Titirsha, Shihao Song, Anup Das, Jeffrey L. Krichmar, Nikil D. Dutt, Nagarajan Kandasamy, Francky Catthoor
2021 A conf
ICCAD
Shihao Song, M. Lakshmi Varshika, Anup Das, Nagarajan Kandasamy
2021 J jnl
CoRR
Shihao Song, M. Lakshmi Varshika, Anup Das, Nagarajan Kandasamy
2021 conf
ASP-DAC
Shihao Song, Anup Das, Onur Mutlu, Nagarajan Kandasamy
2021 J jnl
CoRR
Shihao Song, Harry Chong, Adarsha Balaji, Anup Das, James A. Shackleford, Nagarajan Kandasamy
2021 J jnl
CoRR
Shihao Song, Jui Hanamshet, Adarsha Balaji, Anup Das, Jeffrey L. Krichmar, Nikil D. Dutt, Nagarajan Kandasamy, Francky Catthoor
2021 J jnl
ACM J. Emerg. Technol. Comput. Syst.
Shihao Song, Jui Hanamshet, Adarsha Balaji, Anup Das, Jeffrey L. Krichmar, Nikil D. Dutt, Nagarajan Kandasamy, Francky Catthoor
2021 J jnl
IEEE Embed. Syst. Lett.
Adarsha Balaji, Shihao Song, Anup Das, Jeffrey L. Krichmar, Nikil D. Dutt, James A. Shackleford, Nagarajan Kandasamy, Francky Catthoor
2021 J jnl
CoRR
Twisha Titirsha, Shihao Song, Anup Das, Jeffrey L. Krichmar, Nikil D. Dutt, Nagarajan Kandasamy, Francky Catthoor
2021 B conf
Image Processing
Keyur D. Shah, James A. Shackleford, Nagarajan Kandasamy, Gregory C. Sharp
2021 conf
ICONS
Adarsha Balaji, Shihao Song, Twisha Titirsha, Anup Das, Jeffrey L. Krichmar, Nikil D. Dutt, James A. Shackleford, Nagarajan Kandasamy, Francky Catthoor
2021 J jnl
CoRR
Adarsha Balaji, Shihao Song, Twisha Titirsha, Anup Das, Jeffrey L. Krichmar, Nikil D. Dutt, James A. Shackleford, Nagarajan Kandasamy, Francky Catthoor
2020 J jnl
CoRR
Keyur D. Shah, James A. Shackleford, Nagarajan Kandasamy, Gregory C. Sharp
2020 J jnl
CoRR
Shihao Song, Anup Das, Onur Mutlu, Nagarajan Kandasamy
2020 B conf
LCTES
Shihao Song, Adarsha Balaji, Anup Das, Nagarajan Kandasamy, James A. Shackleford
2020 J jnl
CoRR
Shihao Song, Adarsha Balaji, Anup Das, Nagarajan Kandasamy, James A. Shackleford
2020 J jnl
CoRR
Adarsha Balaji, Shihao Song, Anup Das, Jeffrey L. Krichmar, Nikil D. Dutt, James A. Shackleford, Nagarajan Kandasamy, Francky Catthoor
2020 J jnl
CoRR
Shihao Song, Anup Das, Nagarajan Kandasamy
2020 C conf
ISMM
Shihao Song, Anup Das, Nagarajan Kandasamy
2020 Misc conf
EDCC
Shihao Song, Anup Das, Nagarajan Kandasamy
2020 J jnl
CoRR
Shihao Song, Anup Das, Nagarajan Kandasamy
2020 J jnl
CoRR
Shihao Song, Anup Das, Onur Mutlu, Nagarajan Kandasamy
2020 C conf
ISMM
Shihao Song, Anup Das, Onur Mutlu, Nagarajan Kandasamy
2020 J jnl
IEEE Internet Comput.
M. Brian Blake, Nagarajan Kandasamy, Schahram Dustdar, Xuanzhe Liu
2020 C conf
ISCAS
Saran Phatharodom, Nagarajan Kandasamy, Ioannis Savidis
2020 J jnl
J. Hardw. Syst. Secur.
Marko Jacovic, Kyle Juretus, Nagarajan Kandasamy, Ioannis Savidis, Kapil R. Dandekar
2019 J jnl
IEEE Comput. Archit. Lett.
Adarsha Balaji, Shihao Song, Anup Das, Nikil D. Dutt, Jeff Krichmar, Nagarajan Kandasamy, Francky Catthoor
2019 J jnl
CoRR
Adarsha Balaji, Shihao Song, Anup Das, Nikil D. Dutt, Jeffrey L. Krichmar, Nagarajan Kandasamy, Francky Catthoor
2019 J jnl
IEEE Trans. Cloud Comput.
Tingshan Huang, Nagarajan Kandasamy, Harish Sethu, Matthew C. Stamm
2019 B conf
CLOUD
Salvador DeCelles, Matthew C. Stamm, Nagarajan Kandasamy
2019 J jnl
CoRR
Shihao Song, Anup Das, Onur Mutlu, Nagarajan Kandasamy
2019 J jnl
ACM Trans. Embed. Comput. Syst.
Shihao Song, Anup Das, Onur Mutlu, Nagarajan Kandasamy
2019 J jnl
J. Hardw. Syst. Secur.
James Chacko, Kyle Juretus, Marko Jacovic, Cem Sahin, Nagarajan Kandasamy, Ioannis Savidis, Kapil R. Dandekar
2017 conf
MILCOM
James Chacko, Marko Jacovic, Cem Sahin, Nagarajan Kandasamy, Kapil R. Dandekar
2017 Misc conf
ICNC
James Chacko, Kyle Juretus, Marko Jacovic, Cem Sahin, Nagarajan Kandasamy, Ioannis Savidis, Kapil R. Dandekar
2017 B conf
PIMRC
Anton Paatelma, Danh H. Nguyen, Harri Saarnisaari, Nagarajan Kandasamy, Kapil R. Dandekar
2017 conf
S3@MobiCom
Danh H. Nguyen, Anton Paatelma, Harri Saarnisaari, Nagarajan Kandasamy, Kapil R. Dandekar
2016 J jnl
CoRR
Tingshan Huang, Harish Sethu, Nagarajan Kandasamy
2016 J jnl
IEEE Trans. Netw. Serv. Manag.
Tingshan Huang, Harish Sethu, Nagarajan Kandasamy
2016 conf
INFOCOM Workshops
Danh H. Nguyen, Logan Henderson, James Chacko, Cem Sahin, Anton Paatelma, Harri Saarnisaari, Nagarajan Kandasamy, Kapil R. Dandekar
2016 B conf
CLOUD
Salvador DeCelles, Tingshan Huang, Matthew C. Stamm, Nagarajan Kandasamy
2016 conf
WiNTECH
Danh H. Nguyen, Anton Paatelma, Harri Saarnisaari, Nagarajan Kandasamy, Kapil R. Dandekar
2016 conf
WiNTECH
Danh H. Nguyen, Anton Paatelma, Harri Saarnisaari, Nagarajan Kandasamy, Kapil R. Dandekar
2016 J jnl
CoRR
Simon Begashaw, James Chacko, Nikhil Gulati, Danh H. Nguyen, Nagarajan Kandasamy, Kapil R. Dandekar
2016 J jnl
CoRR
James Chacko, Marko Jacovic, Nagarajan Kandasamy, Kapil R. Dandekar
2016 J jnl
ACM Trans. Auton. Adapt. Syst.
Mirko Viroli, Ada Diaconescu, Nagarajan Kandasamy
2016 A* conf
MobiCom
Danh H. Nguyen, James Chacko, Logan Henderson, Anton Paatelma, Harri Saarnisaari, Nagarajan Kandasamy, Kapil R. Dandekar
2015 B conf
CNSM
Tingshan Huang, Harish Sethu, Nagarajan Kandasamy
2015 A conf
ISSRE
Tingshan Huang, Nagarajan Kandasamy, Harish Sethu
2015 Misc conf
UCC
Salvador DeCelles, Matthew C. Stamm, Nagarajan Kandasamy
2015 A conf
FPGA
Marko Jacovic, James Chacko, Doug Pfeil, Nagarajan Kandasamy, Kapil R. Dandekar
2015 conf
MILCOM
Marko Jacovic, James Chacko, Doug Pfeil, Nagarajan Kandasamy, Kapil R. Dandekar
2015 conf
VTC Fall
Danh H. Nguyen, Mikko Rauhanummi, Harri Saarnisaari, Nagarajan Kandasamy, Kapil R. Dandekar
2015 A conf
FPGA
James Chacko, Cem Sahin, Douglas Pfiel, Nagarajan Kandasamy, Kapil R. Dandekar
2014 conf
CODASPY
Justin Hummel, Andrew McDonald, Vatsal Shah, Riju Singh, Bradford D. Boyle, Tingshan Huang, Nagarajan Kandasamy, Harish Sethu, Steven Weber
2014 conf
SRIF@SIGCOMM
Danh H. Nguyen, Cem Sahin, Boris Shishkin, Nagarajan Kandasamy, Kapil R. Dandekar
2014 conf
HPEC
James Chacko, Cem Sahin, Danh H. Nguyen, Doug Pfeil, Nagarajan Kandasamy, Kapil R. Dandekar
2013 A conf
ICDCS
Rui Wang, Nagarajan Kandasamy, Chika Nwankpa, David R. Kaeli
2012 conf
MICCAI (2)
James A. Shackleford, Qi Yang, Ana M. Lourenço, Nadya Shusharina, Nagarajan Kandasamy, Gregory C. Sharp
2012 C conf
PRDC
Salvador DeCelles, Nagarajan Kandasamy
2012 conf
ICAC
Tingshan Huang, Nagarajan Kandasamy, Harish Sethu
2012 B conf
NOMS
Tingshan Huang, Nagarajan Kandasamy, Harish Sethu
2012 conf
ICAC
Rui Wang, Nagarajan Kandasamy
2011 J jnl
IEEE Trans. Netw. Serv. Manag.
Dara Kusic, Nagarajan Kandasamy, Guofei Jiang
2011 B conf
WiOpt
Boris Shishkin, Doug Pfeil, Danh H. Nguyen, Kevin Wanuga, James Chacko, Jeremy Johnson, Nagarajan Kandasamy, Timothy P. Kurzweg, Kapil R. Dandekar
2010 conf
ICAC
Rui Wang, Dara Kusic, Nagarajan Kandasamy
2010 Misc conf
CISS
Ananth V. Kini, Steven Weber, Fadi A. Aloul, Nagarajan Kandasamy
2009 conf
ACDC@ICAC
Rui Wang, Nagarajan Kandasamy
2009 J jnl
IEEE Trans. Netw. Serv. Manag.
Sherif Abdelwahed, Jia Bai, Rong Su, Nagarajan Kandasamy
2009 J jnl
Clust. Comput.
Dara Kusic, Jeffrey O. Kephart, James E. Hanson, Nagarajan Kandasamy, Guofei Jiang
2008 J jnl
IEEE Trans. Syst. Man Cybern. Part B
Dara Kusic, Nagarajan Kandasamy, Guofei Jiang
2008 conf
ICAC
Dara Kusic, Jeffrey O. Kephart, James E. Hanson, Nagarajan Kandasamy, Guofei Jiang
2007 J jnl
Clust. Comput.
Viraj Bhat, Manish Parashar, Hua Liu, Nagarajan Kandasamy, Mohit Khandekar, Scott Klasky, Sherif Abdelwahed
2007 conf
ICAC
Dara Kusic, Nagarajan Kandasamy, Guofei Jiang
2007 J jnl
IEEE Internet Comput.
Mianyu Wang, Nagarajan Kandasamy, Allon Guez, Moshe Kam
2007 conf
ICAC
Sherif Abdelwahed, Nagarajan Kandasamy
2007 J jnl
Clust. Comput.
Dara Kusic, Nagarajan Kandasamy
2007 A conf
SAT
Fadi A. Aloul, Nagarajan Kandasamy
2007 J jnl
Acta Cybern.
Dávid Hanák, Nagarajan Kandasamy
2006 A conf
DSN
Gregory C. Sharp, Nagarajan Kandasamy
2006 A conf
ICDCS
Nagarajan Kandasamy, Sherif Abdelwahed, Mohit Khandekar
2006 conf
GRID
Viraj Bhat, Manish Parashar, Mohit Khandekar, Nagarajan Kandasamy, Scott Klasky
2006 conf
ICAC
Mianyu Wang, Nagarajan Kandasamy, Allon Guez, Moshe Kam
2006 conf
ICAC
Viraj Bhat, Manish Parashar, Hua Liu, Mohit Khandekar, Nagarajan Kandasamy, Sherif Abdelwahed
2006 conf
ICAC
Dara Kusic, Nagarajan Kandasamy
2006 A* conf
ICRA
Nagarajan Kandasamy, Fadi A. Aloul, Tak-John Koo
2005 conf
Self-star Properties in Complex Information Systems
Nagarajan Kandasamy, Sherif Abdelwahed, Gregory C. Sharp, John P. Hayes
2005 J jnl
Multiagent Grid Syst.
Mohit Khandekar, Nagarajan Kandasamy, Sherif Abdelwahed, Gregory C. Sharp
2005 J jnl
Reliab. Eng. Syst. Saf.
Nagarajan Kandasamy, John P. Hayes, Brian T. Murray
2005 J jnl
IEEE Trans. Parallel Distributed Syst.
Nagarajan Kandasamy, John P. Hayes, Brian T. Murray
2004 conf
WOSS
Sherif Abdelwahed, Nagarajan Kandasamy, Sandeep Neema
2004 A conf
IEEE Real-Time and Embedded Technology and Applications Symposium
Sherif Abdelwahed, Nagarajan Kandasamy, Sandeep Neema
2004 conf
ICAC
Nagarajan Kandasamy, Sherif Abdelwahed, John P. Hayes
2004 conf
SMC (6)
Nagarajan Kandasamy, Dávid Hanák, Christopher P. van Buskirk, Himanshu Neema, Gabor Karsai
2003 B conf
SAFECOMP
Nagarajan Kandasamy, John P. Hayes, Brian T. Murray
2003
Nagarajan Kandasamy
2002 A conf
DSN
Nagarajan Kandasamy, John P. Hayes, Brian T. Murray
1999 B conf
SRDS
Nagarajan Kandasamy, John P. Hayes, Brian T. Murray
redb/extractors/decompiler/bninja/analysis/cfg.py
← Index redb/extractors/decompiler/bninja/analysis/cfg.py python
from binaryninja.enums import LowLevelILOperation as LLIL_OP

# Support both package and standalone imports
try:
    from . import cfg_features
except ImportError:
    from redb.extractors.decompiler.bninja.analysis import cfg_features


# ---------------------------------------------------------------------------
# Task 2.2: Build LLIL operation maps at import time using real enum values
# ---------------------------------------------------------------------------

# Prime product map: LLIL operation integer value -> small prime
cfg_features.LLIL_OP_PRIMES = {
    # SET_REG, SET_REG_SPLIT
    LLIL_OP.LLIL_SET_REG.value: 2,
    LLIL_OP.LLIL_SET_REG_SPLIT.value: 2,
    # SET_FLAG
    LLIL_OP.LLIL_SET_FLAG.value: 3,
    # LOAD
    LLIL_OP.LLIL_LOAD.value: 5,
    # STORE
    LLIL_OP.LLIL_STORE.value: 7,
    # PUSH, POP
    LLIL_OP.LLIL_PUSH.value: 11,
    LLIL_OP.LLIL_POP.value: 13,
    # CALL, TAILCALL, SYSCALL
    LLIL_OP.LLIL_CALL.value: 17,
    LLIL_OP.LLIL_TAILCALL.value: 17,
    LLIL_OP.LLIL_SYSCALL.value: 19,
    # RET, NORET
    LLIL_OP.LLIL_RET.value: 23,
    LLIL_OP.LLIL_NORET.value: 23,
    # IF, GOTO
    LLIL_OP.LLIL_IF.value: 29,
    LLIL_OP.LLIL_GOTO.value: 31,
    # ADD, SUB
    LLIL_OP.LLIL_ADD.value: 37,
    LLIL_OP.LLIL_SUB.value: 41,
    # AND, OR, XOR
    LLIL_OP.LLIL_AND.value: 43,
    LLIL_OP.LLIL_OR.value: 47,
    LLIL_OP.LLIL_XOR.value: 53,
    # LSL, LSR, ASR, ROL, ROR
    LLIL_OP.LLIL_LSL.value: 59,
    LLIL_OP.LLIL_LSR.value: 61,
    LLIL_OP.LLIL_ASR.value: 67,
    LLIL_OP.LLIL_ROL.value: 71,
    LLIL_OP.LLIL_ROR.value: 73,
    # MUL, DIVU, DIVS, MODU, MODS
    LLIL_OP.LLIL_MUL.value: 79,
    LLIL_OP.LLIL_DIVU.value: 83,
    LLIL_OP.LLIL_DIVS.value: 83,
    LLIL_OP.LLIL_MODU.value: 89,
    LLIL_OP.LLIL_MODS.value: 89,
    # NEG, NOT
    LLIL_OP.LLIL_NEG.value: 97,
    LLIL_OP.LLIL_NOT.value: 101,
    # CMP_E, CMP_NE, CMP_SLT, CMP_ULT, CMP_SLE, CMP_ULE
    # CMP_SGT, CMP_UGT, CMP_SGE, CMP_UGE
    LLIL_OP.LLIL_CMP_E.value: 103,
    LLIL_OP.LLIL_CMP_NE.value: 103,
    LLIL_OP.LLIL_CMP_SLT.value: 107,
    LLIL_OP.LLIL_CMP_ULT.value: 107,
    LLIL_OP.LLIL_CMP_SLE.value: 109,
    LLIL_OP.LLIL_CMP_ULE.value: 109,
    LLIL_OP.LLIL_CMP_SGT.value: 113,
    LLIL_OP.LLIL_CMP_UGT.value: 113,
    LLIL_OP.LLIL_CMP_SGE.value: 127,
    LLIL_OP.LLIL_CMP_UGE.value: 127,
    # NOP
    LLIL_OP.LLIL_NOP.value: 1,
    # SX, ZX, LOW_PART, BOOL_TO_INT
    LLIL_OP.LLIL_SX.value: 131,
    LLIL_OP.LLIL_ZX.value: 137,
    LLIL_OP.LLIL_LOW_PART.value: 139,
    LLIL_OP.LLIL_BOOL_TO_INT.value: 149,
    # JUMP, JUMP_TO
    LLIL_OP.LLIL_JUMP.value: 151,
    LLIL_OP.LLIL_JUMP_TO.value: 151,
}

# Category map: LLIL operation integer value -> category index
_ARITHMETIC = {
    LLIL_OP.LLIL_ADD, LLIL_OP.LLIL_ADC, LLIL_OP.LLIL_SUB, LLIL_OP.LLIL_SBB,
    LLIL_OP.LLIL_MUL, LLIL_OP.LLIL_MULU_DP, LLIL_OP.LLIL_MULS_DP,
    LLIL_OP.LLIL_DIVU, LLIL_OP.LLIL_DIVU_DP, LLIL_OP.LLIL_DIVS,
    LLIL_OP.LLIL_DIVS_DP, LLIL_OP.LLIL_MODU, LLIL_OP.LLIL_MODS,
    LLIL_OP.LLIL_NEG,
}
_LOGIC = {
    LLIL_OP.LLIL_AND, LLIL_OP.LLIL_OR, LLIL_OP.LLIL_XOR, LLIL_OP.LLIL_NOT,
    LLIL_OP.LLIL_LSL, LLIL_OP.LLIL_LSR, LLIL_OP.LLIL_ASR,
    LLIL_OP.LLIL_ROL, LLIL_OP.LLIL_RLC, LLIL_OP.LLIL_ROR, LLIL_OP.LLIL_RRC,
}
_TRANSFER = {
    LLIL_OP.LLIL_SET_REG, LLIL_OP.LLIL_SET_REG_SPLIT, LLIL_OP.LLIL_SET_FLAG,
    LLIL_OP.LLIL_GOTO, LLIL_OP.LLIL_IF, LLIL_OP.LLIL_JUMP, LLIL_OP.LLIL_JUMP_TO,
    LLIL_OP.LLIL_RET, LLIL_OP.LLIL_NORET, LLIL_OP.LLIL_PUSH, LLIL_OP.LLIL_POP,
}
_CALL = {
    LLIL_OP.LLIL_CALL, LLIL_OP.LLIL_TAILCALL, LLIL_OP.LLIL_SYSCALL,
}
_COMPARISON = {
    LLIL_OP.LLIL_CMP_E, LLIL_OP.LLIL_CMP_NE,
    LLIL_OP.LLIL_CMP_SLT, LLIL_OP.LLIL_CMP_ULT,
    LLIL_OP.LLIL_CMP_SLE, LLIL_OP.LLIL_CMP_ULE,
    LLIL_OP.LLIL_CMP_SGE, LLIL_OP.LLIL_CMP_UGE,
    LLIL_OP.LLIL_CMP_SGT, LLIL_OP.LLIL_CMP_UGT,
    LLIL_OP.LLIL_TEST_BIT, LLIL_OP.LLIL_FLAG_COND,
}
_MEMORY = {
    LLIL_OP.LLIL_LOAD, LLIL_OP.LLIL_STORE,
}

cfg_features.LLIL_OP_CATEGORIES = {}
for _op in _ARITHMETIC:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_ARITHMETIC
for _op in _LOGIC:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_LOGIC
for _op in _TRANSFER:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_TRANSFER
for _op in _CALL:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_CALL
for _op in _COMPARISON:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_COMPARISON
for _op in _MEMORY:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_MEMORY

# Set of CALL operation values for counting
_CALL_OPS = {op.value for op in _CALL}


# ---------------------------------------------------------------------------
# Task 2.1 + 2.3: Rewritten CFGAnalysis
# ---------------------------------------------------------------------------

class CFGAnalysis:
    def __init__(self, function, llil_function=None):
        self.function = function
        self.llil_function = llil_function

    def extract_function_cfg(self):
        """Extract function-level CFG features as a flat dictionary."""

        if self.function is None:
            return None

        blocks = list(self.function.basic_blocks)
        if not blocks:
            return None

        n = len(blocks)

        # 1. Build index-based adjacency from Binary Ninja blocks
        addr_to_idx = {b.start: i for i, b in enumerate(blocks)}
        successors = [[] for _ in range(n)]
        predecessors = [[] for _ in range(n)]
        for i, block in enumerate(blocks):
            for edge in block.outgoing_edges:
                if edge.target is None:
                    continue
                target_idx = addr_to_idx.get(edge.target.start)
                if target_idx is not None:
                    successors[i].append(target_idx)
                    predecessors[target_idx].append(i)

        # 2. BFS order (reusable across multiple features)
        bfs = cfg_features.bfs_order(successors, n)

        # 3. Collect per-block LLIL operations (for prime product + ACFG features)
        block_llil_ops = self._collect_block_llil_ops(blocks, addr_to_idx, n)
        all_llil_ops = [op for block_ops in block_llil_ops for op in block_ops]

        # 4. Structural counts
        edge_count = sum(len(s) for s in successors)
        total_llil = sum(len(ops) for ops in block_llil_ops)
        call_count = sum(
            1 for ops in block_llil_ops for op in ops
            if op in _CALL_OPS
        )

        # 5. Compute all features
        bb_features = cfg_features.build_block_features(block_llil_ops, successors, n)

        return {
            "cfg_topology_hash": cfg_features.compute_topology_hash(successors, bfs, n),
            "block_count": n,
            "edge_count": edge_count,
            "llil_total_operations": total_llil,
            "call_count": call_count,
            "cyclomatic_complexity": edge_count - n + 2,
            "loop_count": cfg_features.count_back_edges(successors, n),
            "max_depth": cfg_features.bfs_max_depth(successors, n),
            "max_fan_out": max((len(s) for s in successors), default=0),
            "md_index_topdown": cfg_features.compute_md_index_topdown(successors, predecessors, bfs),
            "md_index_bottomup": cfg_features.compute_md_index_bottomup(successors, predecessors, n),
            "prime_product_llil": cfg_features.compute_prime_product(all_llil_ops),
            "cfg_feature_tlsh": cfg_features.compute_cfg_feature_tlsh(bb_features, bfs),
            "wl_minhash": cfg_features.compute_wl_minhash(successors, predecessors, bb_features, n),
            "bb_features": bb_features,
            "cfg_adjacency": cfg_features.pack_adjacency(successors),
        }

    def _collect_block_llil_ops(self, blocks, addr_to_idx, n):
        """
        Collect LLIL operation integers per native basic block.
        Walks the full expression tree of each instruction so that
        nested operations (e.g. ADD inside SET_REG) are captured.
        Returns list of n lists, one per block.
        """
        block_ops = [[] for _ in range(n)]

        if self.llil_function is None:
            return block_ops

        try:
            for llil_block in self.llil_function.basic_blocks:
                # Map LLIL block to native block via source_block
                if llil_block.source_block is not None:
                    native_idx = addr_to_idx.get(llil_block.source_block.start)
                    if native_idx is not None:
                        for instr in llil_block:
                            self._walk_llil_ops(instr, block_ops[native_idx])
        except Exception:
            pass  # Return empty ops — LLIL-dependent fields will be 0/null

        return block_ops

    @staticmethod
    def _walk_llil_ops(expr, ops_list):
        """Collect operation values from an LLIL expression tree iteratively."""
        stack = [expr]
        while stack:
            node = stack.pop()
            if hasattr(node, 'operation'):
                ops_list.append(node.operation.value)
            if hasattr(node, 'operands'):
                for operand in node.operands:
                    if hasattr(operand, 'operation'):
                        stack.append(operand)