Ichiro Yamada

48 papers A* 3B 5C 5Journal 12Unranked 23
YearRankTypeTitle / Venue / Authors
2021 conf
WAT@ACL/IJCNLP
Hideya Mino, Kazutaka Kinugawa, Hitoshi Ito, Isao Goto, Ichiro Yamada, Takenobu Tokunaga
2020 B conf
LREC
Hideya Mino, Hideki Tanaka, Hitoshi Ito, Isao Goto, Ichiro Yamada, Takenobu Tokunaga
2020 B conf
COLING
Hideya Mino, Hitoshi Ito, Isao Goto, Ichiro Yamada, Takenobu Tokunaga
2020 conf
WAT@AAC/IJCNLPL
Isao Goto, Hideya Mino, Hitoshi Ito, Kazutaka Kinugawa, Ichiro Yamada, Hideki Tanaka
2019 conf
WAT@EMNLP-IJCNLP
Hideya Mino, Hitoshi Ito, Isao Goto, Ichiro Yamada, Hideki Tanaka, Takenobu Tokunaga
2017 J jnl
Int. J. Intell. Inf. Database Syst.
Pierre Maret, Pravin Amrut Pawar, Shin'ichi Warisawa, Fabrice Muhlenbach, Guillaume Lopez, Ichiro Yamada
2017 C conf
PACLIC
Taro Miyazaki, Shin Toriumi, Yuka Takei, Ichiro Yamada, Jun Goto
2017 A* conf
ICRA
Rui Fukui, Julien Schneider, Tsurugi Nishioka, Shin'ichi Warisawa, Ichiro Yamada
2017 C conf
PACLIC
Yuka Takei, Taro Miyazaki, Ichiro Yamada, Jun Goto
2016 conf
BMSB
Taro Miyazaki, Ichiro Yamada, Kikuka Miura, Masaru Miyazaki, Atsushi Matsui, Jun Goto, Hideki Sumiyoshi
2016 J jnl
Int. J. Space Based Situated Comput.
Makoto Urakawa, Masaru Miyazaki, Ichiro Yamada, Hiroshi Fujisawa, Toshio Nakagawa
2016 conf
ISWC (Posters & Demos)
Makoto Urakawa, Masaru Miyazaki, Hiroshi Fujisawa, Masahide Naemura, Ichiro Yamada
2015 conf
NBiS
Makoto Urakawa, Masaru Miyazaki, Ichiro Yamada, Hiroshi Fujisawa, Toshio Nakagawa
2015 conf
HEALTHINF
Yujun Niu, Hao Zhang, Shin'ichi Warisawa, Ichiro Yamada
2015 conf
HEALTHINF
Xiaolin Sang, Shin'ichi Warisawa, Hao Zhang, Katsumi Abe, Masahiro Kubo, Kenichiro Tsuda, Ichiro Yamada
2015 C conf
MEDI
Pierre Maret, Shin'ichi Warisawa, Fabrice Muhlenbach, Guillaume Lopez, Ichiro Yamada
2015 conf
ISWC (Posters & Demos)
Masaru Miyazaki, Makoto Urakawa, Ichiro Yamada, Kikuka Miura, Taro Miyazaki, Hiroshi Fujisawa, Toshio Nakagawa
2014 conf
MindCare
Hao Zhang, Guillaume Lopez, Masaki Shuzo, Yasuhiro Omiya, Shunji Mitsuyoshi, Shin'ichi Warisawa, Ichiro Yamada
2014 conf
HEALTHINF
Hao Zhang, Shin'ichi Warisawa, Ichiro Yamada
2014 conf
HEALTHINF
Yang Qian, Ichiro Yamada, Shin'ichi Warisawa
2014 conf
MindCare
Guillaume Lopez, Hirohito Ide, Masaki Shuzo, Shin'ichi Warisawa, Ichiro Yamada
2012 conf
NEMS
Etsuo Maeda, Takanori Matsuki, Ichiro Yamada, Jean-Jacques Delaunay
2012 conf
HEALTHINF
Hao Zhang, Guillaume Lopez, Ran Tao, Masaki Shuzo, Jean-Jacques Delaunay, Ichiro Yamada
2012 conf
HEALTHINF
Hao Zhang, Guillaume Lopez, Masaki Shuzo, Jean-Jacques Delaunay, Ichiro Yamada
2012 B conf
COLING
Ichiro Yamada, Masaru Miyazaki, Hideki Sumiyoshi, Atsushi Matsui, Hironori Furumiya, Hideki Tanaka
2012 J jnl
J. Robotics Mechatronics
Tsukasa Inajima, Yasushi Imai, Masaki Shuzo, Guillaume Lopez, Shintaro Yanagimoto, Katsuya Iijima, Hiroyuki Morita, Ryozo Nagai, Naoki Yahagi, Ichiro Yamada
2012 conf
HEALTHINF
Hirohito Ide, Guillaume Lopez, Masaki Shuzo, Shunji Mitsuyoshi, Jean-Jacques Delaunay, Ichiro Yamada
2011 J jnl
Sensors
Masayuki Nakamura, Jiro Nakamura, Guillaume Lopez, Masaki Shuzo, Ichiro Yamada
2011 B conf
IJCNLP
Ichiro Yamada, Jong-Hoon Oh, Chikara Hashimoto, Kentaro Torisawa, Jun'ichi Kazama, Stijn De Saeger, Takuya Kawada
2011 J jnl
Int. J. Netw. Virtual Organisations
Guillaume Lopez, Masaki Shuzo, Ichiro Yamada
2011 A* conf
EMNLP
Stijn De Saeger, Kentaro Torisawa, Masaaki Tsuchida, Jun'ichi Kazama, Chikara Hashimoto, Ichiro Yamada, Jong-Hoon Oh, István Varga, Yulan Yan
2011 conf
HEALTHINF
Maxime Labat, Guillaume Lopez, Masaki Shuzo, Ichiro Yamada, Yasushi Imai, Shintaro Yanagimoto
2010 B conf
COLING
Jong-Hoon Oh, Ichiro Yamada, Kentaro Torisawa, Stijn De Saeger
2010 conf
NLPKE
Makoto Shimura, Fumiaki Monma, Shunji Mitsuyoshi, Masaki Shuzo, Taishi Yamamoto, Ichiro Yamada
2010 conf
IUCS
Ichiro Yamada, Chikara Hashimoto, Jong-Hoon Oh, Kentaro Torisawa, Kow Kuroda, Stijn De Saeger, Masaaki Tsuchida, Jun'ichi Kazama
2010 J jnl
New Gener. Comput.
Kentaro Torisawa, Stijn De Saeger, Jun'ichi Kazama, Asuka Sumida, Daisuke Noguchi, Yasunori Kakizawa, Masaki Murata, Kow Kuroda, Ichiro Yamada
2009 conf
IUCS
Stijn De Saeger, Jun'ichi Kazama, Kentaro Torisawa, Masaki Murata, Ichiro Yamada, Kow Kuroda
2009 J jnl
Int. J. Biomed. Imaging
Ichiro Yamada, Norio Yoshino, Akemi Tetsumura, Satoshi Okabe, Masayuki Enomoto, Kenichi Sugihara, Jiro Kumagai, Hitoshi Shibuya
2009 A* conf
EMNLP
Ichiro Yamada, Kentaro Torisawa, Jun'ichi Kazama, Kow Kuroda, Masaki Murata, Stijn De Saeger, Francis Bond, Asuka Sumida
2008 J jnl
Int. J. Semantic Comput.
Kikuka Miura, Ichiro Yamada, Hideki Sumiyoshi, Nobuyuki Yagi
2007 J jnl
IEICE Trans. Inf. Syst.
Ichiro Yamada, Timothy Baldwin, Hideki Sumiyoshi, Masahiro Shibata, Nobuyuki Yagi
2007 J jnl
IEICE Trans. Inf. Syst.
Masanori Sano, Ichiro Yamada, Hideki Sumiyoshi, Nobuyuki Yagi
2006 C conf
ISM
Kikuka Miura, Ichiro Yamada, Hideki Sumiyoshi, Nobuyuki Yagi
2005 J jnl
IEICE Trans. Inf. Syst.
Kyoko Ariyasu, Ichiro Yamada, Hideki Sumiyoshi, Masahiro Shibata, Nobuyuki Yagi
2004 C conf
PACLIC
Ichiro Yamada, Timothy Baldwin
2002 conf
ICME (2)
Hideki Sumiyoshi, Ichiro Yamada, Nobuyuki Yagi
1991 conf
MSS
Ichiro Yamada, Minoru Saito, Akinori Watanabe, Kiyoshi Itao
1991 J jnl
J. Robotics Mechatronics
Ichiro Yamada, Kazumasa Kaneko, Makoto Takayanagi
redb/extractors/elf_extractors/elf_relocations.py
← Index redb/extractors/elf_extractors/elf_relocations.py python
import inspect
from datetime import datetime, timezone
from typing import Any, List, Dict

from elftools.elf.elffile import ELFFile
from elftools.common.exceptions import ELFError

from redb.extractors.enum import Tag
from redb.extractors.elf_extractor import ELFExtractor
from redb.models.dataclasses import ELFRelocation


class ELFRelocationExtractor(ELFExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        elf=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            elf,
        )
        self.elf_relocations = []
        self.elastic_index = self.index_prefix + "-elf_relocations"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def _get_relocation_type_string(self, reloc_type: int, machine_arch: str) -> str:
        """Convert relocation type number to human-readable string based on architecture."""
        # This is a simplified mapping - real implementation would need comprehensive
        # architecture-specific relocation type mappings

        common_types = {
            0: "R_NONE",
            1: "R_DIRECT",
            2: "R_PC_RELATIVE",
            3: "R_GOT",
            4: "R_PLT",
            5: "R_COPY",
            6: "R_GLOB_DAT",
            7: "R_JMP_SLOT",
            8: "R_RELATIVE"
        }

        # Architecture-specific mappings could be added here
        if machine_arch == "x86_64":
            x86_64_types = {
                1: "R_X86_64_64",
                2: "R_X86_64_PC32",
                3: "R_X86_64_GOT32",
                4: "R_X86_64_PLT32",
                5: "R_X86_64_COPY",
                6: "R_X86_64_GLOB_DAT",
                7: "R_X86_64_JUMP_SLOT",
                8: "R_X86_64_RELATIVE"
            }
            return x86_64_types.get(reloc_type, f"R_X86_64_{reloc_type}")
        elif machine_arch == "x86":
            i386_types = {
                1: "R_386_32",
                2: "R_386_PC32",
                3: "R_386_GOT32",
                4: "R_386_PLT32",
                5: "R_386_COPY",
                6: "R_386_GLOB_DAT",
                7: "R_386_JMP_SLOT",
                8: "R_386_RELATIVE"
            }
            return i386_types.get(reloc_type, f"R_386_{reloc_type}")

        return common_types.get(reloc_type, f"R_UNKNOWN_{reloc_type}")

    def _extract_relocation_data(self, relocation, section_name: str, machine_arch: str) -> Dict:
        """Extract data from a single relocation entry."""
        try:
            # Get relocation offset
            relocation_offset = relocation.entry.get('r_offset', 0)

            # Get relocation type
            relocation_type = relocation.entry.get('r_info_type', 0)

            # Get symbol index
            relocation_symbol_index = relocation.entry.get('r_info_sym', 0)

            # Get addend (only present in RELA sections)
            relocation_addend = None
            if hasattr(relocation.entry, 'r_addend'):
                relocation_addend = relocation.entry.get('r_addend', 0)

            # Get symbol name if available
            relocation_symbol_name = ""
            if hasattr(relocation, 'symbol') and relocation.symbol:
                relocation_symbol_name = relocation.symbol.name or f"<symbol_{relocation_symbol_index}>"
            else:
                relocation_symbol_name = f"<symbol_{relocation_symbol_index}>"

            # Get type string mapping
            relocation_type_str = self._get_relocation_type_string(relocation_type, machine_arch)

            return ELFRelocation(
                relocation_offset=relocation_offset,
                relocation_type=relocation_type,
                relocation_type_str=relocation_type_str,
                relocation_symbol_index=relocation_symbol_index,
                relocation_symbol_name=relocation_symbol_name,
                relocation_section=section_name,
                relocation_addend=relocation_addend
            )

        except Exception as e:
            self.log.error(f"Error extracting relocation data: {e}")
            return None

    def _extract_relocations_from_section(self, section, machine_arch: str) -> List[Dict]:
        """Extract all relocations from a relocation section."""
        relocations = []

        try:
            if not hasattr(section, 'iter_relocations'):
                return relocations

            section_name = section.name or f"<unnamed_section>"

            for relocation in section.iter_relocations():
                reloc_data = self._extract_relocation_data(relocation, section_name, machine_arch)
                if reloc_data:
                    relocations.append(reloc_data)

        except Exception as e:
            self.log.error(f"Error extracting relocations from section {section.name}: {e}")

        return relocations

    def tag(self):
        return Tag.ELF_RELOCATIONS.value if hasattr(Tag, 'ELF_RELOCATIONS') else "elf_relocations"

    def extract(self):
        try:
            self.log.debug(inspect.currentframe().f_code.co_name)

            def extract_data(elf):
                # Get architecture for relocation type mapping
                machine_arch = self._get_architecture()
                all_relocations = []

                # Iterate through all sections looking for relocation sections with per-section error handling
                for section_index, section in enumerate(elf.iter_sections()):
                    try:
                        # Check if this is a relocation section (.rel or .rela)
                        if (section.name and
                            (section.name.startswith('.rel') or section.name.startswith('.rela')) and
                            hasattr(section, 'iter_relocations')):

                            section_relocations = self._extract_relocations_from_section(section, machine_arch)
                            all_relocations.extend(section_relocations)
                            self.log.debug(f"Extracted {len(section_relocations)} relocations from section {section.name}")
                    except Exception as e:
                        section_name = getattr(section, 'name', f'section_{section_index}')
                        self.log.warning(f"Error processing relocation section {section_name}: {e}")
                        # Continue processing other sections

                return all_relocations

            if not self._is_elf_file():
                return None

            result = self._with_elf_file(extract_data)
            if result is None:
                return None

            self.elf_relocations = result
            return self.elf_relocations

        except Exception as e:
            self.log.error(f"Error extracting ELF relocations {self.hash.sha256}: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        self.log.debug(inspect.currentframe().f_code.co_name)

        if exporter_type == "ElasticsearchExporter":
            return self.elf_relocations
        elif exporter_type == "ClickHouseExporter":
            try:
                # Return valid empty structure if no relocations (e.g., statically linked binary)
                # None is reserved for actual errors

                # Prepare data arrays for all relocations
                data = []
                current_time = datetime.now(timezone.utc)
                for reloc in self.elf_relocations:
                    row = [
                        self.sha256,
                        self.md5,
                        self.sha1,
                        reloc.relocation_offset,
                        reloc.relocation_type,
                        reloc.relocation_type_str,
                        reloc.relocation_symbol_index,
                        reloc.relocation_symbol_name,
                        reloc.relocation_addend,
                        reloc.relocation_section,
                        current_time
                    ]
                    data.append(row)

                column_names = [
                    'sha256', 'md5', 'sha1',
                    'relocation_offset', 'relocation_type', 'relocation_type_str',
                    'relocation_symbol_index', 'relocation_symbol_name',
                    'relocation_addend', 'relocation_section',
                    'analysis_date'
                ]

                if not data:
                    return None

                column_type_names = [
                    'FixedString(64)', 'FixedString(32)', 'FixedString(40)',
                    'UInt64', 'UInt32', 'LowCardinality(String)',
                    'UInt32', 'LowCardinality(String)',
                    'Nullable(Int64)', 'LowCardinality(String)',
                    'DateTime64(3, \'UTC\')'
                ]

                return (data, column_names, column_type_names)

            except Exception as e:
                self.log.error(f"Error preparing export data: {e}")
                raise

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