ubuntu - 在 64 位系统上运行使用 32 位标志编译的分片对象时出错 :PAM unable to dlopen my_pam. 所以错误的 ELF 类:ELFCLASS32

标签 ubuntu dll linker pam

我使用这个编译标志的接口(interface)编译 pam 钩子(Hook):

gcc -O0 -g -m32  -I/ext -I/inc -MD -MP -c -DARCH=x86 -o my_pam.o my_pam.c
 cat /etc/pam.d/sshd
account     optional      /root/my_pam.so
session     optional      /root/my_pam.so
auth        optional      /root/my_pam.so
password    optional      /root/my_pam.so

代码my_pam.c:

#define _GNU_SOURCE
#define PAM_OK 0
#define PAM_ERROR -1    
/*PAM defintion */
#define PAM_SM_AUTH
#define PAM_SM_ACCOUNT
#define PAM_SM_SESSION
#define PAM_SM_PASSWORD 
/*PAM includes */
#include <security/pam_modules.h>
#include <security/pam_modutil.h>
#include <security/pam_ext.h>


/* The actual pam functions are merely wrappers around succeed_if */
PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv) {

        return (PAM_SUCCESS);
}

PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh, int flags, int argc, const char **argv) {
    return PAM_SUCCESS;

}

PAM_EXTERN int pam_sm_chauthtok(pam_handle_t    *pamh,const int flags,int argc,const char **argv)
{
    return PAM_SUCCESS;
}


PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) {
    return PAM_SUCCESS;

}

PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv) {
    return PAM_SUCCESS;
}

    PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh, int flags, int argc, const char **argv) {
        return PAM_SUCCESS;
    }

当我尝试通过 ssh 登录时,我无法登录并且日志文件/var/log/auth.log 那个错误是我的电话: PAM 无法 dlopen/root/my_pam.so 错误的 ELF 类:ELFCLASS32 我想这是因为我在 64 位 ubuntu 上并使用 32 位标志编译(这是我想要的),我确实安装了 sudo apt-get install libpam0g-dev:i386 为了也有 32 位的 pam 库,但似乎 pam 仍在寻找它的 64 位版本。我该如何解决这个问题并让 ubuntu 使用我的 32 位 pam?

最佳答案

你不能,我在这里找到了这个答案 Use 32bit shared library from 64bit application? 经过几次尝试并解决了其他几个问题后,您无法编译它并同时使用 32 位代码和 64 位代码。

关于ubuntu - 在 64 位系统上运行使用 32 位标志编译的分片对象时出错 :PAM unable to dlopen my_pam. 所以错误的 ELF 类:ELFCLASS32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49727062/

相关文章:

php - 社邦#!在 Ubuntu 中无法识别,在 Windows7 中创建的文件 |编码疑难解答

ubuntu - 将数据集从我的 PC 上传到 Google Cloud Platform 上的虚拟机实例的最佳方式

java - 仅为在 Ubuntu 中运行的 Eclipse 更改 GTK3 工具提示颜色

dll - php 7 无法初始化 sqlsrv

C++ 将任意函数从 DLL 动态加载到 std::function

c++ - 有没有办法在加载 dll 时调试发布版本?

oracle - 在 Linux 的 Windows 子系统上安装 Oracle Instant Client

c++ - 构建带有 .v2 扩展名的 Boost 日期/时间 Jamfile

c++ - 为什么链接器允许多个符号定义?

c++ - `--defsym` 链接器标志如何将值传递给源代码?