Ian J. Taylor

130 papers A* 1A 5B 4C 1Misc 2Journal 53Unranked 50
YearRankTypeTitle / Venue / Authors
2023 J jnl
Concurr. Comput. Pract. Exp.
Iain Barclay, Alun D. Preece, Ian J. Taylor, Swapna Krishnakumar Radha, Jarek Nabrzyski
2022 J jnl
IEEE Trans. Green Commun. Netw.
Carlo Mastroianni, Franco Cicirelli, Min Jia, Sabita Maharjan, Ian J. Taylor
2022 conf
GECON
Ian J. Taylor
2022 J jnl
Future Gener. Comput. Syst.
Iain Barclay, Chris Simpkin, Graham A. Bent, Tom La Porta, Declan Millar, Alun D. Preece, Ian J. Taylor, Dinesh C. Verma
2021 J jnl
Concurr. Comput. Pract. Exp.
Iain Barclay, Harrison Taylor, Alun D. Preece, Ian J. Taylor, Dinesh C. Verma, Geeth de Mel
2021 J jnl
CoRR
Iain Barclay, Harrison Taylor, Alun D. Preece, Ian J. Taylor, Dinesh C. Verma, Geeth de Mel
2021 J jnl
Frontiers Blockchain
Maria Freytsis, Iain Barclay, Swapna Krishnakumar Radha, Adam Czajka, Geoffrey H. Siwo, Ian J. Taylor, Sherri L. Bucher
2021 conf
WORKS
Henri Casanova, Ewa Deelman, Sandra Gesing, Michael D. Hildreth, Stephen Hudson, William Koch, Jeffrey Larson, Mary Ann McDowell, Natalie Meyers, John-Luke Navarro, George Papadimitriou, Ryan Tanaka, Ian J. Taylor, Douglas Thain, Stefan M. Wild, Rosa Filgueira, Rafael Ferreira da Silva
2021 J jnl
CoRR
Iain Barclay, Alun D. Preece, Ian J. Taylor, Swapna Krishnakumar Radha, Jarek Nabrzyski
2021 J jnl
Future Gener. Comput. Syst.
Rafael Ferreira da Silva, Sandra Gesing, Rizos Sakellariou, Ian J. Taylor
2021 J jnl
CoRR
Iain Barclay, Michael Cooper, Alun D. Preece, Omer F. Rana, Ian J. Taylor
2020 J jnl
CoRR
Iain Barclay, Swapna Krishnakumar Radha, Alun D. Preece, Ian J. Taylor, Jarek Nabrzyski
2020 J jnl
Future Gener. Comput. Syst.
Zhiming Zhao, Ian J. Taylor, Radu Prodan
2020 J jnl
Future Gener. Comput. Syst.
Chris Simpkin, Ian J. Taylor, Daniel Harborne, Graham A. Bent, Alun D. Preece, Raghu K. Ganti
2020 conf
WORKS@SC
Iain Barclay, Chris Simpkin, Graham A. Bent, Tom La Porta, Declan Millar, Alun D. Preece, Ian J. Taylor, Dinesh C. Verma
2020 J jnl
IEEE/ACM Trans. Netw.
Konstantinos Poularakis, Jaime Llorca, Antonia M. Tulino, Ian J. Taylor, Leandros Tassiulas
2020 J jnl
CoRR
Kyle Chard, Niall Gaffney, Mihael Hategan, Kacper Kowalik, Bertram Ludäscher, Timothy M. McPhillips, Jarek Nabrzyski, Victoria Stodden, Ian J. Taylor, Thomas Thelen, Matthew J. Turk, Craig Willis
2020 J jnl
CoRR
Iain Barclay, Maria Freytsis, Sherri L. Bucher, Swapna Krishnakumar Radha, Alun D. Preece, Ian J. Taylor
2019 J jnl
CoRR
Iain Barclay, Alun D. Preece, Ian J. Taylor, Dinesh C. Verma
2019 conf
IWSG
Steve Bogol, Paul R. Brenner, Adam Brinckman, Ewa Deelman, Rafael Ferreira da Silva, Sandeep Gupta, Jarek Nabrzyski, Soowang Park, Damian Perez, Mats Rynge, Ian J. Taylor, Karan Vahi, Matt Vander Werf, Sarah Rucker, Sebastian Wyngaard
2019 conf
eScience
Kyle Chard, Thomas Thelen, Matthew J. Turk, Craig Willis, Niall Gaffney, Matthew B. Jones, Kacper Kowalik, Bertram Ludäscher, Timothy M. McPhillips, Jarek Nabrzyski, Victoria Stodden, Ian J. Taylor
2019 conf
MILCOM
Chris Simpkin, Ian J. Taylor, Alun D. Preece, Graham A. Bent, Richard Tomsett, Raghu K. Ganti, Olwen Worthington
2019 J jnl
Future Gener. Comput. Syst.
Adam Brinckman, Ewa Deelman, Sandeep Gupta, Jarek Nabrzyski, Soowang Park, Rafael Ferreira da Silva, Ian J. Taylor, Karan Vahi
2019 J jnl
Future Gener. Comput. Syst.
Adam Brinckman, Kyle Chard, Niall Gaffney, Mihael Hategan, Matthew B. Jones, Kacper Kowalik, Sivakumar Kulasekaran, Bertram Ludäscher, Bryce D. Mecum, Jarek Nabrzyski, Victoria Stodden, Ian J. Taylor, Matthew J. Turk, Kandace Turner
2019 J jnl
Future Gener. Comput. Syst.
Chris Simpkin, Ian J. Taylor, Graham A. Bent, Geeth de Mel, Swati Rallapalli, Liang Ma, Mudhakar Srivatsa
2019 B conf
SMARTCOMP
Richard Tomsett, Graham A. Bent, Christopher Simpkin, Ian J. Taylor, Daniel Harborne, Alun D. Preece, Raghu K. Ganti
2019 conf
P-RECS@HPDC
Kyle Chard, Niall Gaffney, Matthew B. Jones, Kacper Kowalik, Bertram Ludäscher, Jarek Nabrzyski, Victoria Stodden, Ian J. Taylor, Matthew J. Turk, Craig Willis
2019 A* conf
INFOCOM
Konstantinos Poularakis, Jaime Llorca, Antonia M. Tulino, Ian J. Taylor, Leandros Tassiulas
2019 J jnl
CoRR
Konstantinos Poularakis, Jaime Llorca, Antonia M. Tulino, Ian J. Taylor, Leandros Tassiulas
2019 ch.
The Internet of Things for Smart Urban Ecosystems
Adina Riposan-Taylor, Ian J. Taylor
2019 J jnl
CoRR
Iain Barclay, Alun D. Preece, Ian J. Taylor, Dinesh C. Verma
2019 J jnl
Future Gener. Comput. Syst.
Polona Stefanic, Matej Cigale, Andrew C. Jones, Louise Knight, Ian J. Taylor, Cristiana Istrate, George Suciu, Alexandre Ulisses, Vlado Stankovski, Salman Taherizadeh, Guadalupe Flores Salado, Spiros Koulouzis, Paul Martin, Zhiming Zhao
2019 J jnl
Future Gener. Comput. Syst.
Polona Stefanic, Matej Cigale, Andrew C. Jones, Louise Knight, Ian J. Taylor
2019 conf
ICTC
Evan Brinckman, Andrey Kuehlkamp, Jarek Nabrzyski, Ian J. Taylor
2019 J jnl
CoRR
Evan Brinckman, Andrey Kuehlkamp, Jarek Nabrzyski, Ian J. Taylor
2019 conf
PARCO
Kyle Chard, Niall Gaffney, Mihael Hategan, Kacper Kowalik, Bertram Ludäscher, Timothy M. McPhillips, Jarek Nabrzyski, Victoria Stodden, Ian J. Taylor, Thomas Thelen, Matthew J. Turk, Craig Willis
2019 conf
IWSG
Iain Barclay, Alun D. Preece, Ian J. Taylor, Dinesh C. Verma
2019 J jnl
CoRR
Iain Barclay, Alun D. Preece, Ian J. Taylor, Dinesh C. Verma
2019 J jnl
Future Gener. Comput. Syst.
Louise Knight, Polona Stefanic, Matej Cigale, Andrew C. Jones, Ian J. Taylor
2018 conf
IWSG
Polona Stefanic, Matej Cigale, Andrew Jones, Louise Knight, David Rogers, Francisco Quevedo Fernandez, Ian J. Taylor
2018 J jnl
CoRR
Adam Brinckman, Kyle Chard, Niall Gaffney, Mihael Hategan, Matthew B. Jones, Kacper Kowalik, Sivakumar Kulasekaran, Bertram Ludäscher, Bryce D. Mecum, Jarek Nabrzyski, Victoria Stodden, Ian J. Taylor, Matthew J. Turk, Kandace Turner
2018 J jnl
CoRR
Iain Barclay, Alun D. Preece, Ian J. Taylor
2018 conf
IEEE BigData
Yeon-Sup Lim, Mudhakar Srivatsa, Supriyo Chakraborty, Ian J. Taylor
2018 conf
MILCOM
Graham A. Bent, Geeth de Mel, Raghu K. Ganti, Tom La Porta, Gavin Pearson, Tien Pham, Sebastian Stein, Leandros Tassiulas, Ian J. Taylor
2018 J jnl
J. Syst. Softw.
Salman Taherizadeh, Andrew Jones, Ian J. Taylor, Zhiming Zhao, Vlado Stankovski
2018 conf
MILCOM
Nirmit Desai, Raghu K. Ganti, Heesung Kwon, Ian J. Taylor, Mudhakar Srivatsa
2017 conf
eScience
Adam Brinckman, Donal Luc, Jarek Nabrzyski, Gary L. Neidig, Joel D. Neidig, Tyler A. Puckett, Swapna Krishnakumar Radha, Ian J. Taylor
2017 conf
IWSG
Ian J. Taylor, Adam Brinckman, Ewa Deelman, Rafael Ferreira da Silva, Sandeep Gupta, Jarek Nabrzyski, Soowang Park, Karan Vahi
2017 conf
SmartWorld/SCALCOM/UIC/ATC/CBDCom/IOP/SCI
Chris Simpkin, Ian J. Taylor, Graham A. Bent, Geeth de Mel, Swati Rallapalli
2017 conf
ESOCC Workshops
Zhiming Zhao, Paul Martin, Andrew Jones, Ian J. Taylor, Vlado Stankovski, Guadalupe Flores Salado, George Suciu, Alexandre Ulisses, Cees de Laat
2017 J jnl
Future Gener. Comput. Syst.
Joseph P. Macker, Ian J. Taylor
2017 ed.
WORKS@SC
Johan Montagnat, Ian J. Taylor, Sandra Gesing, Rizos Sakellariou
2017 J jnl
Future Gener. Comput. Syst.
Malcolm P. Atkinson, Sandra Gesing, Johan Montagnat, Ian J. Taylor
2017 J jnl
PeerJ Prepr.
Ian J. Taylor, Jarek Nabrzyski
2017 conf
SmartWorld/SCALCOM/UIC/ATC/CBDCom/IOP/SCI
Qiao Xiang, Shenshen Chen, Kai Gao, Harvey B. Newman, Ian J. Taylor, Jingxuan Zhang, Yang Richard Yang
2016 conf
GECON
Salman Taherizadeh, Ian J. Taylor, Andrew Jones, Zhiming Zhao, Vlado Stankovski
2015 B conf
CCGRID
Zhiming Zhao, Arie Taal, Andrew Jones, Ian J. Taylor, Vlado Stankovski, Ignacio Garcia Vega, Francisco Jesus Hidalgo, George Suciu, Alexandre Ulisses, Pedro Ferreira, Cees de Laat
2015 conf
Cloud Forward
Zhiming Zhao, Paul Martin, Junchao Wang, Arie Taal, Andrew Jones, Ian J. Taylor, Vlado Stankovski, Ignacio Garcia Vega, George Suciu, Alexandre Ulisses, Cees de Laat
2015 conf
WORKS@SC
Kieran Evans, Andrew Jones, Alun D. Preece, Francisco Quevedo, David Rogers, Irena Spasic, Ian J. Taylor, Vlado Stankovski, Salman Taherizadeh, Jernej Trnkoczy, George Suciu, Victor Suciu, Paul Martin, Junchao Wang, Zhiming Zhao
2015 Misc conf
UCC
Nicholas Haydel, Sandra Gesing, Ian J. Taylor, Gregory R. Madey, Abdul Dakkak, Simon Garcia De Gonzalo, Wen-mei W. Hwu
2015 J jnl
CoRR
Sandra Gesing, Thomas Richard Connor, Ian J. Taylor
2015 conf
WORKS@SC
Joseph P. Macker, Ian J. Taylor
2015 ed.
WORKS@SC
Johan Montagnat, Ian J. Taylor
2015 Misc conf
UCC
Vlado Stankovski, Salman Taherizadeh, Ian J. Taylor, Andrew Jones, Carlo Mastroianni, Bruce Becker, Heru Suhartanto
2014 conf
MILCOM
Joseph P. Macker, Ian J. Taylor
2014 ed.
WORKS@SC
Johan Montagnat, Ian J. Taylor
2014 conf
WORKS@SC
Sandra Gesing, Malcolm P. Atkinson, Rosa Filgueira, Ian J. Taylor, Andrew Jones, Vlado Stankovski, Chee Sun Liew, Alessandro Spinuso, Gábor Terstyánszky, Péter Kacsuk
2013 J jnl
J. Grid Comput.
Karan Vahi, Ian Harvey, Taghrid Samak, Daniel K. Gunter, Kieran Evans, David Rogers, Ian J. Taylor, Monte Goode, Fabio Silva, Eddie Al-Shakarchi, Gaurang Mehta, Ewa Deelman, Andrew Jones
2013 J jnl
J. Grid Comput.
David Rogers, Ian Harvey, Tram Truong Huu, Kieran Evans, Tristan Glatard, Ibrahim Kallel, Ian J. Taylor, Johan Montagnat, Andrew Jones, Andrew Harrison
2013 J jnl
J. Grid Comput.
Kassian Plankensteiner, Radu Prodan, Matthias Janetschek, Thomas Fahringer, Johan Montagnat, David Rogers, Ian Harvey, Ian J. Taylor, Ákos Balaskó, Péter Kacsuk
2013 J jnl
J. Grid Comput.
Johan Montagnat, Ian J. Taylor
2013 ed.
WORKS@SC
Johan Montagnat, Ian J. Taylor
2012 conf
SC Companion
Karan Vahi, Ian Harvey, Taghrid Samak, Daniel K. Gunter, Kieran Evans, David Rogers, Ian J. Taylor, Monte Goode, Fabio Silva, Eddie Al-Shakarchi, Gaurang Mehta, Andrew Jones, Ewa Deelman
2011 conf
IPDPS Workshops
AbdelHamid Elwaer, Andrew Harrison, Ian Kelley, Ian J. Taylor
2011 J jnl
J. Netw. Comput. Appl.
Justin Dean, Andrew Harrison, Robert N. Lass, Joseph P. Macker, David W. Millar, Ian J. Taylor
2011 conf
MILCOM
Joseph P. Macker, Ian J. Taylor
2011 conf
WORKS@SC
Andrew Harrison, Ian Harvey, Andrew Jones, David Rogers, Ian J. Taylor
2011 J jnl
Scalable Comput. Pract. Exp.
AbdelHamid Elwaer, Ian J. Taylor, Omer F. Rana
2011 conf
DICT@HPDC
AbdelHamid Elwaer, Ian J. Taylor, Omer F. Rana
2011 ed.
WORKS@SC
Ian J. Taylor, Johan Montagnat
2010 conf
BADS@ICAC
Robert N. Lass, Joseph P. Macker, David W. Millar, Ian J. Taylor
2010 J jnl
Int. J. Bus. Process. Integr. Manag.
Ahmed Alqaoud, Ian J. Taylor, Andrew Jones
2009 J jnl
Future Gener. Comput. Syst.
Carlo Mastroianni, Pasquale Cozza, Domenico Talia, Ian Kelley, Ian J. Taylor
2009 book
Ian J. Taylor, Andrew Harrison
2009 ed.
SC-WORKS
Ewa Deelman, Ian J. Taylor
2009 conf
SC-WORKS
Ahmed Alqaoud, Ian J. Taylor, Andrew Jones
2009 ch.
Scientific Data Management
Bertram Ludäscher, Ilkay Altintas, Shawn Bowers, Julian Cummings, Terence Critchlow, Ewa Deelman, David De Roure, Juliana Freire, Carole A. Goble, Matthew B. Jones, Scott Klasky, Timothy M. McPhillips, Norbert Podhorszki, Cláudio T. Silva, Ian J. Taylor, Mladen A. Vouk
2009 B conf
CBMS
Adina Riposan, Ian J. Taylor, Omer F. Rana, David R. Owens, Edward C. Conley
2009 conf
SC-WORKS
Andrew Harrison, Ian J. Taylor
2009 J jnl
Future Gener. Comput. Syst.
Ewa Deelman, Dennis Gannon, Matthew S. Shields, Ian J. Taylor
2008 conf
CoreGRID Integration Workshop
Stavros Isaiadis, Vladimir Getov, Ian Kelley, Ian J. Taylor
2008 conf
ChinaGrid
Gilles Fedak, Haiwu He, Oleg Lodygensky, Zoltán Balaton, Zoltán Farkas, Gabor Gombás, Péter Kacsuk, Róbert Lovas, Csaba Attila Marosi, Ian Kelley, Ian J. Taylor, Gábor Terstyánszky, Tamás Kiss, Miguel Cárdenas-Montes, Ad Emmen, Filipe Araújo
2008 conf
CoreGRID Integration Workshop
Zoltán Balaton, Zoltán Farkas, Gabor Gombás, Péter Kacsuk, Róbert Lovas, Csaba Attila Marosi, Gábor Terstyánszky, Tamás Kiss, Oleg Lodygensky, Gilles Fedak, Ad Emmen, Ian Kelley, Ian J. Taylor, Miguel Cárdenas-Montes, Filipe Araújo
2008 J jnl
Parallel Process. Lett.
Zoltán Balaton, Zoltán Farkas, Gabor Gombás, Péter Kacsuk, Róbert Lovas, Csaba Attila Marosi, Ad Emmen, Gábor Terstyánszky, Tamás Kiss, Ian Kelley, Ian J. Taylor, Oleg Lodygensky, Miguel Cárdenas-Montes, Gilles Fedak, Filipe Araújo
2008 J jnl
Int. J. High Perform. Comput. Appl.
Andrew Harrison, Ian J. Taylor, Ian Wang, Matthew S. Shields
2007 conf
HealthGrid
Adina Riposan, Ian J. Taylor, David R. Owens, Omer F. Rana, Edward C. Conley
2007 conf
WORKS@HPDC
Ian J. Taylor, Andrew Harrison, Carlo Mastroianni, Matthew S. Shields
2007 J jnl
Sci. Program.
Eddie Al-Shakarchi, Pasquale Cozza, Andrew Harrison, Carlo Mastroianni, Matthew S. Shields, Domenico Talia, Ian J. Taylor
2007 ch.
Workflows for e-Science, Scientific Workflows for Grids
Dennis Gannon, Ewa Deelman, Matthew S. Shields, Ian J. Taylor
2007 conf
UPGRADE-CN
Ian J. Taylor
2007 conf
CoreGRID Workshop - Making Grids Work
Fernando Costa, Luís Moura Silva, Ian Kelley, Ian J. Taylor
2007 ed.
WORKS@HPDC
Ewa Deelman, Ian J. Taylor
2007 ch.
Workflows for e-Science, Scientific Workflows for Grids
Ian J. Taylor, Matthew S. Shields, Ian Wang, Andrew Harrison
2007 book
Ian J. Taylor, Ewa Deelman, Dennis B. Gannon, Matthew S. Shields
2006 conf
Euro-Par Workshops
Pasquale Cozza, Carlo Mastroianni, Domenico Talia, Ian J. Taylor
2006 conf
ICMC
Ian J. Taylor, Eddie Al-Shakarchi, Stephen David Beck
2006 conf
HealthGrid
Andrew Harrison, Ian Kelley, Emil Mieilica, Adina Riposan, Ian J. Taylor
2006 J jnl
Concurr. Comput. Pract. Exp.
David Churches, Gabor Gombás, Andrew Harrison, Jason Maassen, Craig Robinson, Matthew S. Shields, Ian J. Taylor, Ian Wang
2006 J jnl
J. Grid Comput.
Andrew Harrison, Ian J. Taylor
2006 B conf
e-Science
Ian J. Taylor
2005 J jnl
Concurr. Pract. Exp.
Ian J. Taylor, Ian Wang, Matthew S. Shields, Shalil Majithia
2005 book
Ian J. Taylor
2005 J jnl
J. Grid Comput.
Ewa Deelman, Ian J. Taylor
2005 J jnl
J. Grid Comput.
Ian J. Taylor, Matthew S. Shields, Ian Wang, Andrew Harrison
2005 A conf
IPDPS
Andrew Harrison, Ian J. Taylor
2005 conf
ICPP Workshops
Ali Shaikh Ali, Omer F. Rana, Ian J. Taylor
2004 A conf
ICWS
Shalil Majithia, Matthew S. Shields, Ian J. Taylor, Ian Wang
2003 A conf
IPDPS
Ian J. Taylor, Matthew S. Shields, Ian Wang, Roger Philp
2003 J jnl
Int. J. High Perform. Comput. Appl.
Gabrielle Allen, Tom Goodale, Thomas Radke, Michael Russell, Edward Seidel, Kelly Davis, Konstantinos Dolkas, Nikolaos D. Doulamis, Thilo Kielmann, André Merzky, Jarek Nabrzyski, Juliusz Pukacki, John Shalf, Ian J. Taylor
2003 C conf
HIPS
Ian J. Taylor, Omer F. Rana, Roger Philp, Ian Wang, Matthew S. Shields
2003 A conf
IPDPS
Ian J. Taylor, Omer F. Rana, Roger Philp, Ian Wang, Matthew S. Shields
2003 J jnl
J. Grid Comput.
Ian J. Taylor, Matthew S. Shields, Ian Wang, Omer F. Rana
2003 A conf
IPDPS
Yan Huang, Ian J. Taylor, David W. Walker, Robert Davies
2002 conf
GRID
Gabrielle Allen, Dave Angulo, Tom Goodale, Thilo Kielmann, André Merzky, Jarek Nabrzyski, Juliusz Pukacki, Michael Russell, Thomas Radke, Edward Seidel, John Shalf, Ian J. Taylor
1995 conf
ICNN
Ian J. Taylor, Mike Greenhough
1995 conf
ICMC
Ian J. Taylor, Mike Greenhough
1995 conf
ICMC
Ian J. Taylor, B. F. Schultz
1994 conf
ICMC
Ian J. Taylor, Mike Greenhough
1994 J jnl
Connect. Sci.
Ian J. Taylor, Mike Greenhough
1993 conf
ICMC
Ian J. Taylor, Mike Greenhough
redb/extractors/pe_extractors/pe_dotnet.py
← Index redb/extractors/pe_extractors/pe_dotnet.py python
import inspect
import pefile
from dotnetfile import DotNetPE

import base64
from hashlib import md5
from pprint import pprint

import magic
import pefile

from redb.extractors.enum import Tag
from redb.extractors.pe_extractor import PEExtractor
from redb.models.dataclasses import PEDotNet
from datetime import datetime, timezone
import json
from typing import Any


class PEDotNetExtractor(PEExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        pe=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            pe,
        )
        # self.pe_features = None
        self.elastic_index = self.index_prefix + "-pe_dotnet"
        self.dotnet, self.error = self._generate_dotnetfile_object()
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _decode_assembly_flags(self, flag_value):
        self.log.debug(inspect.currentframe().f_code.co_name)
        ASSEMBLY_FLAGS = {
            0x00000001: "COMIMAGE_FLAGS_ILONLY",
            0x00000002: "COMIMAGE_FLAGS_32BITREQUIRED",
            0x00000004: "COMIMAGE_FLAGS_IL_LIBRARY",
            0x00000008: "COMIMAGE_FLAGS_STRONGNAMESIGNED",
            0x00000010: "COMIMAGE_FLAGS_NATIVE_ENTRYPOINT",
            0x00010000: "COMIMAGE_FLAGS_TRACKDEBUGDATA",
            0x00020000: "COMIMAGE_FLAGS_32BITPREFERRED",
        }
        flags = []
        for bit, name in ASSEMBLY_FLAGS.items():
            if flag_value & bit:
                flags.append(name)
        return flags

    def _normalize_data(self, data):
        self.log.debug(inspect.currentframe().f_code.co_name)
        if isinstance(data, str):
            return {"value": data}
        return data

    def _compute_md5(self, data):
        self.log.debug(inspect.currentframe().f_code.co_name)
        if isinstance(data, str):
            # If it's a string, encode it to first
            return md5(data.encode("raw_unicode_escape")).hexdigest()
        elif not isinstance(data, bytes):
            # If it's neither string nor bytes, convert it to string and then to bytes
            return md5(str(data).encode("raw_unicode_escape")).hexdigest()
        else:
            return md5(data).hexdigest()

    def tag(self):
        return Tag.PE_DOTNET.value

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        metadata = {}

        if self.error:
            metadata["Corrupted"] = self.error.args[0]
            dotnet = PEDotNet(metadata)
            self.dotnet = dotnet  # Store for later use in prepare_export_data
            return dotnet  # Return the extracted data instead of exporting directly

        metadata["info"] = {}
        try:
            available_tables = self.dotnet.existent_metadata_tables()
        except Exception as e:
            self.log.error(f"Error getting metadata tables for {self.hash.sha256}: {e}")
            available_tables = []
            metadata["info"]["PotentiallyCorrupted"] = True

        # GUID extraction
        try:
            input_string = self.dotnet.guid_stream_guids[0].string_representation
            
            formatted_uuid = (
                f"{input_string[6:8]}{input_string[4:6]}{input_string[2:4]}{input_string[0:2]}"
                f"-{input_string[10:12]}{input_string[8:10]}"
                f"-{input_string[14:16]}{input_string[12:14]}"
                f"-{input_string[16:20]}"
                f"-{input_string[20:]}"
            )
            metadata["info"]["ModuleVersionID"] = formatted_uuid
        except Exception as e:
            self.log.error(f"Error extracting GUID for {self.hash.sha256}: {e}")

        # CLR Version
        try:
            metadata["info"]["CLRversion"] = self.dotnet.get_runtime_target_version()
        except Exception as e:
            self.log.error(f"Error getting CLR version for {self.hash.sha256}: {e}")

        # Module information
        try:
            if self.dotnet.metadata_table_exists("Module"):
                metadata["info"]["AssemblyModuleName"] = self.dotnet.Module.get_module_name()
        except Exception as e:
            self.log.error(f"Error getting module info for {self.hash.sha256}: {e}")

        # Basic properties
        try:
            metadata["info"].update({
                "IsNativeNgenImage": self.dotnet.is_native_image(),
                "IsMixedAssembly": self.dotnet.is_mixed_assembly(),
                "IsWindowsFormsApp": self.dotnet.is_windows_forms_app(),
                "EntryPointToken": self.dotnet.clr_header.EntryPointToken.value,
                "HasNativeEntryPoint": self.dotnet.has_native_entry_point(),
            })
        except Exception as e:
            self.log.error(f"Error getting basic properties for {self.hash.sha256}: {e}")

        # Assembly flags
        try:
            metadata["info"]["AssemblyFlags"] = self._decode_assembly_flags(
                self.dotnet.clr_header.Flags.value
            )
        except Exception as e:
            self.log.error(f"Error getting assembly flags for {self.hash.sha256}: {e}")

        # More Metadata/Info CLR Header
        try:
            metadata["info"]["NumOfStreams"] = self.dotnet.get_number_of_streams()
            # [TODO] The following two on VT are "RVA entry point"
            #  and "Resources va" respectively. To verify.
            metadata["info"][
                "ResourcesDirectoryAddress"
            ] = self.dotnet.clr_header.ResourcesDirectoryAddress.value
            metadata["info"][
                "ResourcesDirectorySize"
            ] = self.dotnet.clr_header.ResourcesDirectorySize.value
            metadata["info"][
                "StrongNameSignatureAddress"
            ] = self.dotnet.clr_header.StrongNameSignatureAddress.value
            metadata["info"][
                "StrongNameSignatureSize"
            ] = self.dotnet.clr_header.StrongNameSignatureSize.value
            metadata["info"][
                "CodeManagerTableAddress"
            ] = self.dotnet.clr_header.CodeManagerTableAddress.value
            metadata["info"][
                "CodeManagerTableSize"
            ] = self.dotnet.clr_header.CodeManagerTableSize.value
            metadata["info"][
                "VTableFixupsAddress"
            ] = self.dotnet.clr_header.VTableFixupsAddress.value
            metadata["info"][
                "VTableFixupsSize"
            ] = self.dotnet.clr_header.VTableFixupsSize.value
            metadata["info"][
                "ExportAddressTableJumpsAddress"
            ] = self.dotnet.clr_header.ExportAddressTableJumpsAddress.value
            metadata["info"][
                "ExportAddressTableJumpsSize"
            ] = self.dotnet.clr_header.ExportAddressTableJumpsSize.value
            metadata["info"][
                "ManagedNativeHeaderAddress"
            ] = self.dotnet.clr_header.ManagedNativeHeaderAddress.value
            metadata["info"][
                "ManagedNativeHeaderSize"
            ] = self.dotnet.clr_header.ManagedNativeHeaderSize.value
        except Exception as e:
            self.log.error(f"Error getting more metadata/info clr header for {self.hash.sha256}: {e}")

        # Streams section
        try:
            metadata["Streams"] = {}
            stream_names = self.dotnet.get_stream_names()
            for name in stream_names:
                indx = stream_names.index(name)
                stream_header = self.dotnet.dotnet_stream_headers[indx]
                stream_address = self.dotnet.dotnet_streams[indx].address
                metadata["Streams"][name] = {}
                metadata["Streams"][name]["raw_name"] = base64.b64encode(
                    stream_header.Name.value
                ).decode()
                # metadata["Streams"][name]["raw_name"] = name
                metadata["Streams"][name]["size"] = stream_header.Size.value
                # Retrieve the stream data directly using the given address and size
                stream_data = self.pe.get_data(stream_address, stream_header.Size.value)
                metadata["Streams"][name]["entropy"] = (
                    "%.2f" % pefile.SectionStructure.entropy_H(self.pe, stream_data)
                )
                metadata["Streams"][name]["md5"] = md5(stream_data).hexdigest()
        except Exception as e:
            self.log.error(f"Error getting streams for {self.hash.sha256}: {e}")

        # ManifestResource
        try:
            metadata["ManifestResource"] = ()
            if "ManifestResource" in available_tables:
                metadata["info"]["HasManifestResource"] = True
                metadata["ManifestResource"] = (
                    self.dotnet.ManifestResource.get_resource_names()
                )
        except Exception as e:
            self.log.error(f"Error getting manifest resource for {self.hash.sha256}: {e}")

        # ExternalAssemblyRef
        try:
            metadata["ExternalAssemblyRef"] = {}
            if "AssemblyRef" in available_tables:
                metadata["ExternalAssemblyRef"][
                    "names"
                ] = self.dotnet.AssemblyRef.get_assemblyref_names()
                metadata["ExternalAssemblyRef"][
                    "cultures"
                ] = self.dotnet.AssemblyRef.get_assemblyref_cultures()
        except Exception as e:
            self.log.error(f"Error getting external assembly ref for {self.hash.sha256}: {e}")

        # AssemblyData
        try:
            metadata["AssemblyData"] = {}
            if "Assembly" in available_tables:
                metadata["AssemblyData"][
                    "name"
                ] = self.dotnet.Assembly.get_assembly_name()
                # It's officially a one-row table, but there are ITW files with more than one row.
                # It stores information about the current assembly. It is documented in ECMA-335.
                assembly_table = self.dotnet.metadata_tables_lookup[
                    "Assembly"
                ].table_rows[0]
                metadata["AssemblyData"][
                    "MajorVersion"
                ] = assembly_table.MajorVersion.value
                metadata["AssemblyData"][
                    "MinorVersion"
                ] = assembly_table.MinorVersion.value
                metadata["AssemblyData"]["hashalgid"] = assembly_table.HashAlgId.value
                metadata["AssemblyData"][
                    "BuildNumber"
                ] = assembly_table.BuildNumber.value
                metadata["AssemblyData"][
                    "RevisionNumber"
                ] = assembly_table.RevisionNumber.value
                metadata["AssemblyData"][
                    "culture"
                ] = self.dotnet.Assembly.get_assembly_culture()
        except Exception as e:
            self.log.error(f"Error getting assembly data for {self.hash.sha256}: {e}")

        # TypeDef handling
        try:
            metadata["TypeDef"] = {}
            if "TypeDef" in available_tables:
                metadata["info"]["HasTypeDef"] = True
                # Get basic type definitions
                try:
                    # Get all types (ANY visibility)
                    type_defs = self.dotnet.TypeDef.get_type_names()
                    metadata["TypeDef"]["names"] = type_defs if type_defs else []
                    
                    # Get detailed type information with methods
                    types_with_methods = self.dotnet.TypeDef.get_type_names_with_methods()
                    if types_with_methods:
                        metadata["TypeDef"]["detailed"] = []
                        for type_info in types_with_methods:
                            type_data = {
                                "type": type_info.Type,
                                "namespace": type_info.Namespace,
                                "flags": type_info.Flags,
                                "methods": []
                            }
                            for method in type_info.Methods:
                                method_data = {
                                    "name": method.Name,
                                    "flags": method.Flags
                                }
                                if method.Signature:
                                    method_data["signature"] = {
                                        "parameters": method.Signature.get("parameter", []),
                                        "return_type": method.Signature.get("return", ""),
                                        "has_this": method.Signature.get("hasthis", False)
                                    }
                                type_data["methods"].append(method_data)
                            metadata["TypeDef"]["detailed"].append(type_data)
                except AttributeError as e:
                    self.log.warning(f"TypeDef table exists but attributes missing for {self.hash.sha256}: {e}")
                    # metadata["info"]["TypeDefParsingError"] = f"Missing attributes: {str(e)}"
                except Exception as e:
                    self.log.error(f"Error parsing TypeDef table for {self.hash.sha256}: {e}")
                    # metadata["info"]["TypeDefParsingError"] = str(e)
        except Exception as e:
            self.log.error(f"Error handling TypeDef section for {self.hash.sha256}: {e}")
            metadata["TypeDef"] = {"names": [], "detailed": []}
            # metadata["info"]["TypeDefParsingError"] = str(e)

        # ExternalUnmanagedModules
        try:
            metadata["ExternalUnmanagedModules"] = ()
            if "ModuleRef" in available_tables:
                metadata["info"]["HasModuleRef"] = True
                metadata["ExternalUnmanagedModules"] = (
                    self.dotnet.ModuleRef.get_unmanaged_module_names(
                        self.dotnet.Type.UnmanagedModules.RAW
                    )
                )
        except Exception as e:
            self.log.error(f"Error getting external unmanaged modules for {self.hash.sha256}: {e}")

        # ExternalUnmanagedMethods
        try:
            metadata["ExternalUnmanagedMethods"] = ()
            if "ImplMap" in available_tables:
                metadata["info"]["HasImplMap"] = True
                metadata["ExternalUnmanagedMethods"] = (
                    self.dotnet.ImplMap.get_unmanaged_functions()
                )
        except Exception as e:
            self.log.error(f"Error getting external unmanaged methods for {self.hash.sha256}: {e}")

        # Event
        try:
            metadata["Event"] = ()
            if "Event" in available_tables:
                metadata["info"]["HasEvent"] = True
                metadata["Event"] = self.dotnet.Event.get_event_names()
        except Exception as e:
            self.log.error(f"Error getting event for {self.hash.sha256}: {e}")

        # Resources
        try:
            metadata["Resources"] = []
            if self.dotnet.has_resources():
                tmp_resources_list = []
                resource_data = self.dotnet.get_resources()
                for data in resource_data:
                    tmp_dict = {}
                    for resource_item in data.items():
                        if resource_item[0] == "SubResources":
                            if resource_item[1]:
                                tmp_dict["SubResources"] = {}
                                for sub_resource in resource_item[1]:
                                    for sub_resource_item in sub_resource.items():
                                        if sub_resource_item[0] == "Data":
                                            # Check if data is a sequence type that supports len()
                                            if hasattr(sub_resource_item[1], '__len__') and len(sub_resource_item[1]) > 100:
                                                tmp_dict["SubResources"]["Data"] = {}
                                                try:
                                                    # tmp_dict["SubResources"]["Data"][
                                                    #     "md5"
                                                    # ] = md5(
                                                    #     sub_resource_item[1].encode()
                                                    # ).hexdigest()
                                                    tmp_dict["SubResources"]["Data"][
                                                        "md5"
                                                    ] = self._compute_md5(
                                                        sub_resource_item[1]
                                                    )
                                                except Exception as e:
                                                    self.log.error(
                                                        f"Error in dotnet resources"
                                                        f" extraction {self.hash.sha256}: {e}"
                                                    )
                                                guess = magic.from_buffer(
                                                    sub_resource_item[1], mime=True
                                                )
                                                tmp_dict["SubResources"]["Data"][
                                                    "MimeType"
                                                ] = (guess if guess else None)
                                            else:
                                                normalized_data = self._normalize_data(
                                                    sub_resource_item[1].decode()
                                                    if isinstance(
                                                        sub_resource_item[1], bytes
                                                    )
                                                    else sub_resource_item[1]
                                                )
                                                tmp_dict["SubResources"][
                                                    sub_resource_item[0]
                                                ] = normalized_data
                                        else:
                                            tmp_dict["SubResources"][
                                                sub_resource_item[0]
                                            ] = (
                                                sub_resource_item[1].decode()
                                                if isinstance(
                                                    sub_resource_item[1], bytes
                                                )
                                                else sub_resource_item[1]
                                            )
                        elif resource_item[0] == "Data":
                            # Check if data is a sequence type that supports len()
                            if hasattr(resource_item[1], '__len__') and len(resource_item[1]) > 100:
                                tmp_dict["Data"] = {}
                                tmp_dict["Data"]["md5"] = self._compute_md5(
                                    resource_item[1]
                                )
                                guess = magic.from_buffer(resource_item[1], mime=True)
                                tmp_dict["Data"]["MimeType"] = guess if guess else None
                            else:
                                normalized_data = self._normalize_data(
                                    resource_item[1].decode()
                                    if isinstance(resource_item[1], bytes)
                                    else resource_item[1]
                                )
                                tmp_dict["Data"] = normalized_data
                        else:
                            tmp_dict[resource_item[0]] = (
                                resource_item[1].decode()
                                if isinstance(resource_item[1], bytes)
                                else resource_item[1]
                            )
                    tmp_resources_list.append(tmp_dict)
                metadata["Resources"] = tmp_resources_list
        except Exception as e:
            self.log.error(f"Error getting resources for {self.hash.sha256}: {e}")
            metadata["Resources"] = []  # Ensure we always have a valid list even on error

        dotnet = PEDotNet(metadata)
        self.dotnet = dotnet  # Store for later use in prepare_export_data
        return dotnet  # Return the extracted data instead of exporting directly


    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.dotnet
        elif exporter_type == "ClickHouseExporter":
            # Convert metadata to JSON string
            metadata_json = json.dumps(self.dotnet.dotnet)
            
            data = [[
                self.sha256,
                self.md5,
                self.sha1,
                metadata_json,
                datetime.now(timezone.utc)
            ]]
            
            column_names = [
                'sha256', 'md5', 'sha1', 'dotnet', 'analysis_date'
            ]
            
            if not data:
                return None

            column_type_names = [
                'String', 'String', 'String', 'JSON', 'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)

    def get_clickhouse_table(self) -> str:
        return "redb_pe_dotnet"