AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 771785
Accepted
syheliel syheliel
syheliel syheliel
Asked: 2024-03-07 13:20:43 +0800 CST2024-03-07 13:20:43 +0800 CST 2024-03-07 13:20:43 +0800 CST

Como os executáveis ​​usam POSIX para manter a compatibilidade entre diferentes sistemas UNIX?

  • 772

No meu entendimento, o POSIX especifica apenas um conjunto de APIs que o sistema operacional precisa fornecer, mas não especifica os detalhes da implementação, especificamente a compatibilidade no nível do assembly. Por exemplo, em x86, você precisa usar um syscall para obter a API POSIX:

1. set `eax` to the syscall number
2. set syscall arguments
3. call int 0x80

Mas esse processo pode variar muito dependendo de:

  1. SO UNIX: diferentes sistemas operacionais podem ter um mapeamento diferente do número syscall para a API POSIX
  2. arquitetura: X86/arm tem instruções diferentes para chamarint 0x80

Então acho que o POSIX faz seu trabalho mantendo a conversão da API para a biblioteca POSIX em sistemas operacionais diferentes glibc.so.

A API POSIX é fornecida como símbolo glibc. Portanto, toda vez que o executável chama a API POSIX, ele encontra o símbolo em todos os sistemas operacionais glibc.soe não há necessidade de chamar int 0x80 diretamente no executável.

Então minha pergunta é:

  1. meu entendimento está correto?
  2. além disso glibc.so, existem outras bibliotecas que funcionam como, glibc.somas em sistemas operacionais UNIX diferentes?
linux
  • 1 1 respostas
  • 483 Views

1 respostas

  • Voted
  1. Best Answer
    Stephen Kitt
    2024-03-07T13:54:52+08:002024-03-07T13:54:52+08:00

    POSIX não especifica interfaces binárias, portanto você não pode construir um binário “POSIX” e executá-lo em diferentes sistemas operacionais estilo POSIX. O POSIX nem se importa com chamadas de sistema; ele define funções e não importa onde essas funções sejam implementadas.

    Na prática, no Linux e em outros sistemas estilo POSIX, as funções são implementadas em uma “biblioteca C”, como você mencionou. Mas não existe nem mesmo uma maneira definida pelo POSIX para os binários chamarem essas funções; POSIX para programas C é mais relevante ao escrever e compilar programas e ao considerar o comportamento das interfaces do sistema em tempo de execução, mas não no que diz respeito à forma como essas interfaces são acessadas. O c99comando para executar um compilador é especificado, portanto, ser capaz de pegar a fonte C e transformá-la em um binário é um requisito no POSIX, mas os detalhes desse binário são específicos do sistema. (As interfaces binárias no Linux seguem a especificação conhecida como System V ABI , com várias extensões específicas da arquitetura.)

    Existem outras bibliotecas C. Cada plataforma oferece a sua própria e algumas plataformas possuem várias. No Linux, existe a biblioteca GNU C , mas também musl .

    Observe também que a biblioteca C não é usada apenas para programas C; em sistemas estilo POSIX, a maioria dos compiladores e interpretadores acabam usando-o. (Exceções notáveis ​​incluem binários Go que implementam suas próprias interfaces para a API do espaço do usuário do kernel.)

    • 7

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve