• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Вопросы по Macos

  • Автор темы Omh
  • Дата начала
O

Omh

Пытаюсь в терминале написать простейшую вещь:
Код:
java -classpath /System/Library/ESignClasses/classes EDocPrepare

Где,
/System/Library/ESignClasses/classes - папка где лежат мои jar и class файлы
EDocPrepare - название одного из файлов

Получаю ошибку java.lang.NoClassDefFoundError
Погуглил - стандартная ошибка, если джава не можент найти класс.
Но ведь я же ей опеределяю, где искать при помощи ключа classpath.

Нет идей? :)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
есть :)
ты класс в пакедж засувал? - путь к классу указывать полный
этоже касабельно и др классов, кот. будут юзаться
плюс к тому, ежели у тя либа, то путь должен включать имя либы (а не токма каталог)
плюс, в класспаз нужно добавить текущую диру как ./

Добавлено: т.е. - ежели есть указания пакеджей (в сорцах и соот. в бинарях) - то эти классы должны лежать по относительным путям от каталога запуска, либо получаться контектацией класспаз и имени класса
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
ЗЫ: как ты всё это в вянде-то запускал, ведь пр-ла там такие же
 
O

Omh

Я там не всё писал, вот полная ситуация.
Папки на винде:
Код:
c:\Program Files\ESignClasses\classes\EDOCPrepare.class
c:\Program Files\ESignClasses\edoc.license
c:\Program Files\ESignClasses\edoc.properties
c:\Program Files\ESignClasses\gclib.dll
c:\Program Files\ESignClasses\lib\bcmail-jdk15-143.jar
c:\Program Files\ESignClasses\lib\bcprov-jdk15-143.jar
c:\Program Files\ESignClasses\lib\bctsp-jdk15-143.jar
c:\Program Files\ESignClasses\lib\edoc-1.4.3.jar
c:\Program Files\ESignClasses\lib\edoc-client-1.4.3.jar
c:\Program Files\ESignClasses\lib\jdk5\jaf-1.1.1.jar
c:\Program Files\ESignClasses\lib\jdk5\xmldsig-1.0.1.jar
c:\Program Files\ESignClasses\lib\jdk5\xmlsec-1.0.1.jar
c:\Program Files\ESignClasses\lib\log4j-1.2.14.jar
c:\Program Files\ESignClasses\lib\lpmscapi.jar
c:\Program Files\ESignClasses\lib\pkcs11wrapper-1.2.17.jar
c:\Program Files\ESignClasses\log4j.xml
c:\Program Files\ESignClasses\lpmscapi.dll
c:\Program Files\ESignClasses\pkcs11wrapper.dll

Папки на мак
Код:
/System/Library/ESignClasses/classes/EDOCPrepare.class
/System/Library/ESignClasses/edoc.license
/System/Library/ESignClasses/edoc.properties
/System/Library/ESignClasses/gclib.dll
/System/Library/ESignClasses/lib/bcmail-jdk15-143.jar
/System/Library/ESignClasses/lib/bcprov-jdk15-143.jar
/System/Library/ESignClasses/lib/bctsp-jdk15-143.jar
/System/Library/ESignClasses/lib/edoc-1.4.3.jar
/System/Library/ESignClasses/lib/edoc-client-1.4.3.jar
/System/Library/ESignClasses/lib/jdk5/jaf-1.1.1.jar
/System/Library/ESignClasses/lib/jdk5/xmldsig-1.0.1.jar
/System/Library/ESignClasses/lib/jdk5/xmlsec-1.0.1.jar
/System/Library/ESignClasses/lib/log4j-1.2.14.jar
/System/Library/ESignClasses/lib/lpmscapi.jar
/System/Library/ESignClasses/lib/pkcs11wrapper-1.2.17.jar
/System/Library/ESignClasses/log4j.xml
/System/Library/ESignClasses/lpmscapi.dll
/System/Library/ESignClasses/pkcs11wrapper.dll


Вызов на винде (вооьще одной строкой, это я просто так разбил что бы было удобнее):
Код:
"C:\Program Files\Java\jre6\bin\java"
-DLOG_FOLDER="C:\Users\user\AppData\Local\Temp\IMP_20110311_094329_1"
-classpath "C:\Program Files\ESignClasses\lib\bcmail-jdk15-143.jar;C:\Program Files\ESignClasses\lib\bcprov-jdk15-143.jar;C:\Program Files\ESignClasses\lib\bctsp-jdk15-143.jar;C:\Program Files\ESignClasses\lib\edoc-1.4.3.jar;C:\Program Files\ESignClasses\lib\edoc-client-1.4.3.jar;C:\Program Files\ESignClasses\lib\log4j-1.2.14.jar;C:\Program Files\ESignClasses\lib\lpmscapi.jar;C:\Program Files\ESignClasses\lib\pkcs11wrapper-1.2.17.jar;C:\Program Files\ESignClasses;C:\Program Files\ESignClasses\classes"
EDOCPrepare
"C:\Users\user\AppData\Local\Temp\IMP_20110311_094329_1"
"C:\Users\user\AppData\Local\Temp\IMP_20110311_094329_1\EDOCPrepareResult.xml"
"C:\Users\user\AppData\Local\Temp\IMP_20110311_094329_1\test.xml"

Вызов на мак
Код:
java
-DLOG_FOLDER="/tmp/IMP_20110311_094624_1"
-classpath "/System/Library/ESignClasses/lib/bcmail-jdk15-143.jar:/System/Library/ESignClasses/lib/bcprov-jdk15-143.jar:/System/Library/ESignClasses/lib/bctsp-jdk15-143.jar:/System/Library/ESignClasses/lib/edoc-client-1.4.3.jar:/System/Library/ESignClasses/lib/log4j-1.2.14.jar:/System/Library/ESignClasses/lib/lpmscapi.jar:/System/Library/ESignClasses/lib/pkcs11wrapper-1.2.17.jar:/System/Library/ESignClasses:/System/Library/ESignClasses/classes"
EDOCPrepare
"/tmp/IMP_20110311_094624_1" "/tmp/IMP_20110311_094624_1/EDOCPrepareResult.xml"
"/tmp/IMP_20110311_094624_1/test.xml"

Не уверен в нужности всех этих ковычек и т.д.
Но не работало и без них.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
дык у тя получилось аль нет?
 
O

Omh

Не, получаю
Код:
Exception in thread "main" java.lang.NoClassDefFoundError: lv/pasts/eme/edoc/EDOCException
Caused by: java.lang.ClassNotFoundException: lv.pasts.eme.edoc.EDOCException
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Куда клпать, не понимаю
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
ты просто с терминала не могешь запустить?
и опять - я не увидел ./ в пути
 
O

Omh

Да-да, это всё напрямик с терминала, т.е. всякие shell и прочее тут не при чём.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
./

Добавлено: ежели либы не секретные - скинь я посмотрю
ты чего-то в классах напутал

Добавлено: да... и дай
ls -l /System/Library/ESignClasses/lib
 
O

Omh

Я добавлял "./" как первый элемент в classpath - sameshit.
lmike, а под маком/линусом эти виндозные кавычки нужны?
Я смотрел example в интеренете - вроде нет.

Блин, ни одного подкованного человека вокруг нету у кого мог бы спросить :(
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
кавычки нужны тока для разорванных (пробелами) сучностей
ваще кавычки не нужны

Добавлено: выложи архив - я посмотрю
у меня никса под-рукой
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
твоих либ и классов
 
O

Omh

turumbay
Как!!? Как ты увидел?
У меня наверно просто глаза уже в мыле: смотрю в книгу - вижу фигу, но похоже проблема именно в этом!
Во всяком случае ошибка пропала.
Буду смотреть дальше.

lmike
Спасибо тебе огромное, но я пока гляну, что там у меня с добавлением этого джарника последнего.
И это, джары я выложить могу, а вот классы, к сожалению, нет - типа проперти конторы и всё такое :(

Буду смотреть дальше.
Если бы не вы, я бы никогда не сделал эту вещь.

Кста, я насчёт мака погорячился: как слегка привыкнешь, так и вроде ничё становится, удобно в некоторой степени даже :(
 
T

turumbay

turumbay
Как!!? Как ты увидел?
the matrix has you :)
хотя, если честно, магия не очень сложная: видим NoClassDefFoundError: lv/pasts/eme/edoc/EDOCException - значит оно не видит соотв. класса из пакета lv.pasts.eme.edoc. Очевидно, что в приведенном списке jar-ов к этому пакету могут иметь отношение edoc-1.4.3.jar или edoc-client-1.4.3.jar. Остается посмотреть, кто из них отсутствует в cp.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
а след "сложность" я предвижу :(
длинная строка...
можно в скрипте определить:
<!--shcode--><pre><code class='bash'>#!/bin/bash
export CLASSPATH=<этот длинный список>
...[/CODE]и соответ. не юзать ключ -classpath
 
T

turumbay

а след "сложность" я предвижу :(
длинная строка...
можно в скрипте определить:
<!--shcode--><pre><code class='bash'>#!/bin/bash
export CLASSPATH=<этот длинный список>
...[/CODE]и соответ. не юзать ключ -classpath
а можно просто собрать один исполняемый jar.
я вот не вспомню уже, когда приходилось возится с cp.
сборка проекта, управление зависимостями, манифесты и пр. и пр. - весь этот головняк нужно перекладывать на спец. инструменты: ant, maven.

Код:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<archive>
<manifest>
<mainClass>ru.turumbay.demo.junit_demo.CMDSync</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
сборка
Код:
mvn assembly:assembly
запуск
Код:
java -jar target/junit_demo.jar
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
кстати... вспомнил :(
вместо xargs можно (а в указанном случа - рекомендуется) юзать:
<!--shcode--><pre><code class='bash'>#!/bin/bash
BASEDIR=$(dirname $0)
source $BASEDIR/exec.txt[/CODE]или эквивалент<!--shcode--><pre><code class='bash'>#!/bin/bash
BASEDIR=$(dirname $0)
. $BASEDIR/exec.txt[/CODE]
x бит, на exec.txt, не нужно (в таком раскладе)
чего и добивались
НО упростится синтаксис в файле exec.txt (в случ xargs есть ограничения)

Добавлено:
а можно просто собрать один исполняемый jar.
разумеется так лучше и поступить :(
но этож ломать весь подход динамического формирования ;)
 
O

Omh

Товарищи
turumbay
lmike
ещё раз спасибо.
Всё работает через промежуточный файл, всё валидируется, распаковывается и подписывается.
Спасибо, я бы без вас не справился.

Забыл добавить, всё так глобальное меню - зло :)
Больше кликов получается, есмли мышевозить.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!